24

つまり、同じオブジェクトを参照せずに、あるリストの要素の値を別のリストにコピーする必要があります。これらはリストです:

List<Integer> listA = new ArrayList<Integer>();
List<Integer> ListB = new ArrayList<Integer>();

listA = (added some values);

listB = (do what?)...

PS。初心者の質問をお詫びしますが、そんなことはしたことがありません。

4

6 に答える 6

32

整数のコピーを作成する理由はまったくありません。整数は不変のクラスです。これは、その値がIntegerインスタンスの作成時に設定され、変更できないことを意味します。したがって、整数参照は、誰もがその値を変更できる方法がないため、恐れることなく複数のリストやスレッドで共有できます。したがって、あなたの質問は本当に意味がありません。

b別のリストと同じ整数を含むArrayListを作成するaには、次のコードを使用するだけです。

List<Integer> b = new ArrayList<Integer>(a);

確かに整数は複製されませんが、複製は完全に不要なので、これは良いことです。

于 2012-05-03T11:42:48.737 に答える
21

Collections.copyメソッドを試してみることができます。

public static void copy(List dest、List src)

あるリストから別のリストにすべての要素をコピーします。操作後、宛先リスト内のコピーされた各要素のインデックスは、ソースリスト内のそのインデックスと同じになります。宛先リストは、少なくともソースリストと同じ長さである必要があります。それより長い場合、宛先リストの残りの要素は影響を受けません。このメソッドは線形時間で実行されます。

パラメータ:dest-宛先リスト。src-ソースリスト。

注:上記は整数などの単純なデータ型で機能するはずですが、他のオブジェクトを参照する可能性のある独自のオブジェクトがある場合は、各オブジェクトを繰り返し処理して個別にコピーする必要があります。

于 2012-05-03T07:50:36.460 に答える
6

このクラスのメソッドを使用Collectionsして、ArrayListのすべての要素を別のArrayListにコピーします。

Collections.copy(listA, listB); 
于 2012-05-03T07:47:42.963 に答える
2

他の人からの回答はまったく問題ありませんが、これを使用してみてください。しかし、私のオプションによれば、以下が最善の方法です。

List<Integer> listB = new ArrayList<Integer>(listA); 
于 2012-05-03T08:13:28.083 に答える
-1

clone()とCloneableを使用すると、幸運はあまり得られません。浅いコピーしか作成されません。次のようなものを使用できます-http://javatechniques.com/blog/faster-deep-copies-of-java-objects/

于 2012-05-03T07:47:20.400 に答える
-4

これを試して。

ListB.addAll(listA);
于 2012-05-03T07:42:24.317 に答える