2012-06-30 15 views
18

私は以下のJavaコードを持っています。1つのリストをjavaの別のリストに追加しますか?

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

現在、リストには10​​0個のオブジェクトがあります。

私は以下のように1つの以上のインスタンスを作成した場合:

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

感謝を! uは声明anotherList.addAll(リスト)を実行したら、その後uはそれが別のリスト

+2

マインドをそのIオリジナルの質問をロールバックしました。なぜなら、あなたの編集は質問自体の全体的なポイントを逃したからです。 –

+4

問題はもはや疑問ではなく、まったく意味がありません;) –

+0

この質問には編集が必要です。それは意味がありません。 – Ogbe

答えて

24

オブジェクトは1回だけメモリに格納されます。最初にlistに追加すると、オブジェクト参照が追加されます。

anotherList.addAllも参照を追加するだけです。そのため、まだ100個のオブジェクトしかメモリに残っていません。

要素を追加/削除してlistを変更すると、anotherListは変更されません。しかし、listのオブジェクトを変更した場合は、同じ参照が両方のリストから指し示されているため、コンテンツはanotherListからアクセスすると変更されます。

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.) 

ですから、anotherListlist内のオブジェクトの参照をコピーします。List.addAllの公式Javadocを引用

0

には...、それは同じ参照を保持しません。したがって、list内の特定のオブジェクトに変更を加えると、anotherListの同じオブジェクトに影響します。

リスト内のオブジェクトを追加または削除しても、他のオブジェクトには影響しません。

listおよびanotherListは、2つの異なるインスタンスであり、それらは、それらの「内側」のオブジェクトの同じ参照を保持するだけである。

+0

あなたの答えはあいまいです。 – Joset

9

100に運ばないいくつかのリストデータを変更した場合

+0

あなたのお返事ありがとうございます。リスト内のオブジェクトを追加/削除すると、同じ変更が他のリストにも反映されますか? – user1016403

+2

いいえ影響を与えません。 listとanotherListは2つの異なるインスタンスであり、オブジェクトの「内部」の同じ参照のみを保持します。 – Joset

4

anotherListの参照されたオブジェクト(削除、追加、並べ替えなど)で動作しないメソッドはすべてローカルなので、listには影響しません。 のJava APIから

2

抜粋ためのaddAll(収集C)インタフェース一覧でsee here

は「の順番で、このリストの最後に指定されたコレクション内のすべての要素を追加します指定されたコレクションのイテレータによって返されることを示します(オプションのオペレーション)。あなたは両方のリストを持っているよう

あなたは、できるだけ多くのオブジェクトを持つことになります - あなたの最初のリスト内のオブジェクトの数と、あなたの第二のリストを持っているオブジェクトの数を - あなたのケースで100

関連する問題