Java ArrayList:复制构造函数和通过赋值复制之间的区别

use*_*340 0 java list

我有两个列表,ListA并且ListB我想要复制ListBListA.

在复杂性和结果方面,以下内容有何区别:

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

ass*_*ias 7

listA = listB,只有一个列表.所以,如果你打电话listA.add(something);,它也会增加listB.

随着listA = new ArrayList(listB);有两个列表(其中会包含相同的对象).所以,如果你打电话listA.add(something);,它不会添加任何东西listB.

在复杂性方面,第一个是简单的分配(即在恒定时间内运行),而第二个在O(n)中运行,n是大小listB.


Mar*_*nik 6

在第一种情况下,根本没有复制.只是别名:listA可以被视为同义词,别名ListB.

这自然是由于Java对引用类型的独占使用.Java中没有类型实际上可以将对象作为其值.