2012-06-30 48 views
18

Tôi có dưới mã java.Thêm một danh sách vào danh sách khác trong java?

List<SomePojo> list = new ArrayList<SomePojo>(); 
//add 100 SomePojo objects to list. 

Danh sách bây giờ có 100 đối tượng.

Nếu tôi tạo ra một ví dụ nữa như sau:

List<SomePojo> anotherList = new ArrayList<SomePojo>(); 
anotherList .addAll(list); 

Cảm ơn!

+2

tâm mà tôi đã cuộn lại câu hỏi gốc, bởi vì các chỉnh sửa của bạn đã bỏ lỡ toàn bộ vấn đề của câu hỏi. –

+4

Vấn đề là vấn đề này không còn là câu hỏi nữa, và không có ý nghĩa gì cả;) –

+0

làm ơn câu hỏi này cần chỉnh sửa, nó không có ý nghĩa. – Ogbe

Trả lời

24

Một đối tượng chỉ một lần trong bộ nhớ. Bổ sung đầu tiên của bạn vào list chỉ cần thêm tham chiếu đối tượng.

anotherList.addAll cũng sẽ chỉ thêm các tham chiếu. Vì vậy, vẫn chỉ có 100 đối tượng trong bộ nhớ.

Nếu bạn thay đổi list bằng cách thêm/xóa các phần tử, anotherList sẽ không bị thay đổi. Nhưng nếu bạn thay đổi bất kỳ đối tượng nào trong list, thì nội dung của nó cũng sẽ bị thay đổi khi truy cập nó từ anotherList, vì cùng một tham chiếu được trỏ đến từ cả hai danh sách.

0

không ... Khi u đã thực hiện báo cáo kết quả anotherList.addAll (danh sách) và sau đó nếu u thay đổi một số dữ liệu danh sách đó không mang vào danh sách

+0

câu trả lời của bạn là mơ hồ. – Joset

9

100 khác, nó sẽ giữ tài liệu tham khảo tương tự. Do đó nếu bạn thay đổi một đối tượng cụ thể trong list, nó sẽ ảnh hưởng đến cùng một đối tượng trong anotherList.

Thêm hoặc xóa đối tượng trong bất kỳ danh sách nào sẽ không ảnh hưởng đến đối tượng khác.

listanotherList là hai trường hợp khác nhau, chúng chỉ giữ cùng một tham chiếu của đối tượng "bên trong" chúng.

+0

cảm ơn bạn đã trả lời ur. nếu tôi thêm/xóa bất kỳ đối tượng nào trong danh sách, có thay đổi tương tự được phản ánh cho danh sách khác không? – user1016403

+2

không có ảnh hưởng nào. danh sách và một danh sách khác là hai trường hợp khác nhau, chúng chỉ giữ cùng một tham chiếu của các đối tượng "bên trong" chúng. – Joset

4

Trích dẫn javadoc chính thức của List.addAll:

Appends all of the elements in the specified collection to the end of 
this list, in the order that they are returned by the specified 
collection's iterator (optional operation). The behavior of this 
operation is undefined if the specified collection is modified while 
the operation is in progress. (Note that this will occur if the 
specified collection is this list, and it's nonempty.) 

Vì vậy, bạn sẽ sao chép các tài liệu tham khảo của các đối tượng trong list để anotherList. Bất kỳ phương pháp nào không hoạt động trên các đối tượng được tham chiếu của anotherList (chẳng hạn như xóa, bổ sung, sắp xếp) là cục bộ cho đối tượng đó và do đó sẽ không ảnh hưởng đến list.

2

Trích từ API Java cho addAll (thu c) trong giao diện Danh sáchsee here

"Gắn tất cả các yếu tố trong bộ sưu tập theo quy định đến hết danh sách này, theo thứ tự chúng được trả về bởi trình vòng lặp của bộ sưu tập được chỉ định (hoạt động tùy chọn). "

Bạn bạn sẽ có càng nhiều đối tượng như bạn có trong cả hai danh sách - số lượng các đối tượng trong danh sách đầu tiên của bạn cộng với số lượng đối tượng mà bạn có trong danh sách thứ hai của bạn - trong trường hợp của bạn 100.

Các vấn đề liên quan