Java'da addAll işlevi bir kopya oluşturur

list.addAll (list2) çağrıldığında listelerdeki nesneler listeye kopyalanır mı? ya da sadece referanslarını kopyalayın ... javadoc hakkında herhangi bir açıklama bulamadı ...

20

3 cevap

Nesnelerin veya verilerin hiçbir kopyası yapılmaz; referansları sadece liste nesnesine eklenir.

31
katma
nasıl bir kopya ve addAll yaparsınız?
katma yazar Jacolack, kaynak
Hayır tabii değil.
katma yazar Ernest Friedman-Hill, kaynak
Öyleyse list2 'e daha sonra bir eleman eklersek ne olur? Otomatik olarak listeye eklenecek mi?
katma yazar iamprem, kaynak
list2 içinde bir öğeyi değiştirdiysem, sonra list çıktısında değişiklik göreceğim anlamına gelir.
katma yazar Neeson.Z, kaynak

Hayır, nesneler kopyalanmayacak; Aynı nesnelere yapılan referanslar listeye eklenecektir.

4
katma
Fakat sözleşme bunu uyguluyor mu? ArrayList uygulamasının addAll() öğesini sığ bir kopyayla uyguladığını görüyorum, ancak dokümanda bir özellik yok.
katma yazar Ziyao Wei, kaynak
nasıl bir kopya ve addAll yaparsınız?
katma yazar Jacolack, kaynak
@ZiyaoWei: Java'da bir nesneyi kopyalamanın genel bir yolu yoktur: C ++ 'da olduğu gibi otomatik olarak oluşturulmuş kopya oluşturucular yoktur ve clone() yöntemi çok az sınıf tarafından desteklenir. Bu nedenle, tüm öğelerini kopyalamak için istediği bir kapsayıcı bunu yapamazdı.
katma yazar Ernest Friedman-Hill, kaynak
Hayır tabii değil. Onlar iki ayrı liste.
katma yazar Ernest Friedman-Hill, kaynak
@ZiyaoWei "Bütün unsurları ekler" diye belirtir, yani yapacağı şey budur - tüm elementleri ekleyin. Bir elemanın bir kopyası eleman değildir, bu bir kopyadır.
katma yazar Dave Newton, kaynak
Öyleyse list2 'e daha sonra bir eleman eklersek ne olur? Otomatik olarak listeye eklenecek mi?
katma yazar iamprem, kaynak

Genel olarak, "tümünü ekle", yani nesneler için, orijinallere işaretçiler kullanıldığında, java nesneleri kopyalamaz.

* But be careful ! For strings, due to immutability, an array copy will not point to the original string values, and you must not expect that changing a pointer to a string that was added to an array list will result in a new value inside the array list.

3
katma
nasıl bir kopya ve addAll yaparsınız?
katma yazar Jacolack, kaynak