我有两个列表,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
您没有复制列表,您只是为该对象分配了另一个别名(引用)。