0

以下は、Java の 2 つの独立したリストで終了しますか?

List<Obj> list1 = getList();
List<Obj> list2 = new ArrayList<Obj>(list1);

この時点で list1 と list2 は互いに独立していますか?

4

3 に答える 3

2

浅いコピーである参照のみをコピーするため、コピーにはソース リストのオブジェクトへの同じ参照が含まれます。

したがって、ソース リストを変更せずに要素を削除または追加する場合と同様に、リストを変更できます。

ただし、リストの要素を変更すると、ソースとコピーの両方のリストに変更が反映されます。

于 2013-10-16T23:04:21.640 に答える
1
List<Obj> list1 = getList();
List<Obj> list2 = new ArrayList<Obj>(list1);

キーワードを使用したためnewlist1は絶対に と等しくありませんlist2。つまり、これらは 2 つの異なるリストです。ただし、それらは同じ要素のリストを共有します (つまり、これらの要素は同じ参照を持ちます)。詳細については、ArrayListのコピー コンストラクターを参照してください。

元のリストから完全に独立したリストを作成する場合は、ディープ コピーが必要になる場合があります。例えば、

List<Obj> list1 = getList();
List<Obj> list2 = new ArrayList<Obj>();
for (Obj obj: list1) {
  list2.add(obj.clone());
}

注:cloneオブジェクトの浅いコピーのみを作成します。

于 2013-10-16T23:23:12.603 に答える