JavaのaddAll関数はコピーを作成しますか?

list.addAll(list2)が呼び出されると、リスト内のオブジェクトはリストにコピーされますか?またはちょうど彼らの参照をコピー... javadocの説明を見つけられませんでした...

20

3 答え

オブジェクトまたはそのデータのコピーは作成されません。その参照は単にリストオブジェクトに追加されます。

31
追加された
あなたはコピーとaddAllをどうやって作りますか?
追加された 著者 Jacolack,
いいえ、もちろんです。
追加された 著者 Ernest Friedman-Hill,
後で list2 に要素を追加するとどうなりますか?自動的に list に追加されますか?
追加された 著者 iamprem,
つまり、 list2 の要素を変更すると、出力 list の変更が表示されます。
追加された 著者 Neeson.Z,

いいえ、オブジェクトはコピーされません。同じオブジェクトへの参照がリストに追加されます。

4
追加された
しかし契約はこれを強制するのですか? ArrayListは、浅いコピーでaddAll()を実装していますが、ドキュメントには仕様がありません。
追加された 著者 Ziyao Wei,
あなたはコピーとaddAllをどうやって作りますか?
追加された 著者 Jacolack,
@ ZiyaoWei:Javaでオブジェクトをコピーする一般的な方法はありません.C ++のように自動的に生成されるコピーコンストラクタはなく、 clone()メソッドは非常に少数のクラスでサポートされています。したがって、すべての要素をコピーする必要なコンテナでは、それを行うことができないことに気付くでしょう。
追加された 著者 Ernest Friedman-Hill,
いいえ、もちろんです。彼らは2つの別々のリストです。
追加された 著者 Ernest Friedman-Hill,
@ ZiyaoWeiそれは "すべての要素を追加する"ので、すべての要素を追加します。要素のコピーは要素ではなく、コピーです。
追加された 著者 Dave Newton,
後で list2 に要素を追加するとどうなりますか?自動的に list に追加されますか?
追加された 著者 iamprem,

一般に、javaは "すべてを追加する"、つまりオブジェクトに対しては、オリジナルへのポインタが使用されたときにオブジェクトをコピーしません。

* 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
追加された
あなたはコピーとaddAllをどうやって作りますか?
追加された 著者 Jacolack,