Java ArrayList thay thế tại chỉ mục cụ thể


212

Tôi cần giúp đỡ với java này xin vui lòng. Tôi đã tạo một ArrayList của bóng đèn và tôi đang cố gắng thay thế một bóng đèn ở chỉ số cụ thể bằng một bóng đèn khác. Vậy với tiêu đề sau, tôi phải tiến hành như thế nào?

public void replaceBulb(int index, Bulbs theBulb) {

}

9
Để biết giá trị của nó, tôi đã xem giao diện Danh sách để "thay thế", "đặt" hoặc "chèn". Tôi đã không nghĩ đến việc tìm kiếm thiết lập.
GuiSim

2
@GuiSim Giao diện Danh sách không dài, bạn có thể dễ dàng đọc toàn bộ giao diện cùng một lúc trong 5 phút ...

2
Tôi đã sử dụng tính năng tự động hoàn thành của Eclipse, không nhìn qua giao diện.
GuiSim

Câu trả lời:


367

Kiểm tra set(int index, E element)phương thức trong giao diện Danh sách


3
Bạn đúng. Nhưng bạn có thể nghĩ để chỉnh sửa nó bởi vì câu trả lời của bạn dẫn đến thực tế như phương thức set () là một phương thức tĩnh, phải không?
Kẻ giết người Android

9
@AndroidKiller Nó tĩnh như ArrayList.set();nhưng khi bạn gọi nó trong danh sách của riêng bạn thì không phải:myArrayList.set(int, E);
whitfin

Vấn đề trong phương thức này là nó ném mảngOutOfBoundException trong trường hợp mảng ListList chưa được khởi tạo. Tôi muốn đặt một yếu tố ở chỉ số phù hợp với sự bổ sung của nó, không chắc có cách nào để làm điều đó không.
Bionix1441

@ Bionix1441 ngay cả khi danh sách đã được khởi tạo, vẫn có thể cố gắng đặt giá trị cho một chỉ mục không tồn tại. Vì vậy, bạn chỉ cần đảm bảo rằng chỉ số của bạn là hợp lệ.
TotoroTotoro

126

Bạn có thể thay thế các mục ở vị trí cụ thể bằng cách sử dụng phương thức set của ArrayList như sau:

list.set( your_index, your_item );

Nhưng phần tử nên có mặt ở chỉ mục bạn đang truyền vào bên trong phương thức set () nếu không nó sẽ ném ngoại lệ.


1
@vaxquis ok thưa bạn, xin vui lòng viết java 8 và phát hành nó. chúng tôi ở đây để sử dụng nó ;). Trong SO, câu trả lời phải luôn luôn theo câu hỏi, vì vậy vui lòng đọc câu hỏi trước. Và vấn đề là gì nếu nó trả về giá trị trước đó, nếu bạn muốn giá trị đó thì bạn có thể sử dụng cách khác để lại nó. Nó đang thay thế giá trị cũ và đó là nó.
Kẻ giết người Android

1
@vaxquis bạn đã đọc bình luận của tôi trước đây. Câu trả lời được đề cập rõ ràng nên luôn luôn theo câu hỏi. Người đặt câu hỏi, anh ta đã đề cập rằng anh ta muốn thay thế phần tử để điều đó có nghĩa là anh ta có danh sách mảng với các phần tử trong đó. Bây giờ rõ rồi thưa ngài ???
Kẻ giết người Android

1
@vaxquis Những điều bạn xem xét, một người mới sẽ biết điều này, vì vậy những vấn đề này không có ý nghĩa gì. Tôi vẫn đã chỉnh sửa để làm cho bạn hạnh phúc :)
Android Killer

2
Trở thành một người mới có nghĩa là ai đó KHÔNG BIẾT cách mã hóa một cái gì đó đúng. Việc cung cấp mã không hợp lệ là sai và không có lý do gì cho nó, bởi vì nó có thể và thường sẽ mang lại sự nhầm lẫn cho người mới bắt đầu. Cung cấp một ví dụ mã chính xác và khép kín là những gì StackOverflow hướng tới. Cảm ơn bạn đã cải thiện câu trả lời của bạn.



7
public void setItem(List<Item> dataEntity, Item item) {
    int itemIndex = dataEntity.indexOf(item);
    if (itemIndex != -1) {
        dataEntity.set(itemIndex, item);
    }
}

1
Điều này sẽ chỉ hoạt động nếu mục mới bằng với mục cũ về phương thức equals (), phải không?
spikemanuk

@spikemanuk, nó phụ thuộc vào việc triển khai phương thức 'bằng ()' trong 'Mục'. Nếu bình đẳng hoàn toàn phụ thuộc vào 'id' của 'hàng' sau đó mã này có thể được sử dụng để thay thế 'Item: {id = 1, name = London} bởi' Item: {id = 1, name = Paris}
Aniruddha Jagtap
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.