2つのリストがListAあり、にコピーしListBたいと思います。ListBListA
複雑さと結果の点で、次の違いは何ですか?
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
リストをコピーするのではなく、そのオブジェクトに別のエイリアス(参照)を割り当てるだけです。