2つのリストがListA
あり、にコピーしListB
たいと思います。ListB
ListA
複雑さと結果の点で、次の違いは何ですか?
ListA = ListB;
ListA = new ArrayList(ListB);
を使用listA = listB
すると、リストは1つだけになります。したがって、を呼び出すとlistA.add(something);
、それも追加されlistB
ます。
2つのリストがlistA = new ArrayList(listB);
あります(たまたま同じオブジェクトが含まれています)。したがって、を呼び出すとlistA.add(something);
、に何も追加されませんlistB
。
複雑さの観点から、最初の割り当ては単純な割り当て(つまり、一定時間で実行)ですが、2番目の割り当てはO(n)で実行され、nはのサイズですlistB
。
最初のケースでは、コピーはまったくありません。エイリアシング:の同義語、エイリアスlistA
と見なすことができますListB
。
これは当然、Javaが参照型を排他的に使用しているためです。Javaの型は、実際にはオブジェクトをその値として保持できません。
にとってListA = ListB
リストをコピーするのではなく、そのオブジェクトに別のエイリアス(参照)を割り当てるだけです。