我有两个列表,ListA
我ListB
想复制ListB
到ListA
.
就复杂性和结果而言,以下各项有什么区别:
ListA = ListB;
ListA = new ArrayList(ListB);
,listA = listB
只有一个列表。所以如果你打电话listA.add(something);
,它也会增加listB
。
有listA = new ArrayList(listB);
两个列表(恰好包含相同的对象)。所以如果你打电话listA.add(something);
,它不会添加任何东西到listB
.
就复杂性而言,第一个是简单的赋值(即在恒定时间内运行),而第二个在 O(n) 中运行,n 是 的大小listB
。
在第一种情况下,根本没有复制。只是aliasing :listA
可以看作是同义词,别名为ListB
.
这自然是由于 Java 对引用类型的独占使用。Java 中的任何类型实际上都不能将对象作为其值。
为了ListA = ListB
您没有复制列表,您只是为该对象分配了另一个别名(引用)。