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

时间:2013-01-18 13:00:02

标签: java list

我有两个列表ListAListB,我想将ListB复制到ListA

以下在复杂性和结果方面有以下区别:

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

3 个答案:

答案 0 :(得分:7)

使用listA = listB,只有一个列表。因此,如果您致电listA.add(something);,它也会添加到listB

listA = new ArrayList(listB);有两个列表(碰巧包含相同的对象)。因此,如果您致电listA.add(something);,则不会向listB添加任何内容。

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

答案 1 :(得分:6)

在第一种情况下,根本没有复制。只需别名listA即可视为同义词,ListB的别名。

这自然是由于Java专门使用引用类型。 Java中没有类型实际上可以将对象作为其值。

答案 2 :(得分:3)

代表ListA = ListB

您没有复制列表,只是为该对象分配了另一个别名(引用)。