0

2つのリストがListAあり、にコピーしListBたいと思います。ListBListA

複雑さと結果の点で、次の違いは何ですか?

  1. ListA = ListB;
  2. ListA = new ArrayList(ListB);
4

3 に答える 3

7

を使用listA = listBすると、リストは1つだけになります。したがって、を呼び出すとlistA.add(something);、それも追加されlistBます。

2つのリストがlistA = new ArrayList(listB);あります(たまたま同じオブジェクトが含まれています)。したがって、を呼び出すとlistA.add(something);、に何も追加されませんlistB

複雑さの観点から、最初の割り当ては単純な割り当て(つまり、一定時間で実行)ですが、2番目の割り当てはO(n)で実行され、nはのサイズですlistB

于 2013-01-18T13:01:25.780 に答える
6

最初のケースでは、コピーはまったくありません。エイリアシング:の同義語、エイリアスlistAと見なすことができますListB

これは当然、Javaが参照型を排他的に使用しているためです。Javaの型は、実際にはオブジェクトをその値として保持できません。

于 2013-01-18T13:00:41.800 に答える
3

にとってListA = ListB

リストをコピーするのではなく、そのオブジェクトに別のエイリアス(参照)を割り当てるだけです。

于 2013-01-18T13:01:30.543 に答える