Java 这是处理列表时的正确行为吗?

Java 这是处理列表时的正确行为吗?,java,list,Java,List,如果我创建一个列表并添加十个元素,然后将列表对象复制到另一个列表并调用list.clear在第二个列表中,两个列表都被清除 Random random = new Random(); List<Double> list1 = new ArrayList<Double>(); List<Double> list2 = new ArrayList<Double>(); for (int i = 0; i < 10; i++) { lis

如果我创建一个列表并添加十个元素,然后将列表对象复制到另一个列表并调用list.clear在第二个列表中,两个列表都被清除

Random random = new Random();
List<Double> list1 = new ArrayList<Double>();
List<Double> list2 = new ArrayList<Double>();

for (int i = 0; i < 10; i++) {
    list1.add(random.nextDouble());
}

list2 = list1; //Both lists have ten elements

list1.clear(); //Both lists are now empty
Random Random=new Random();
List list1=新的ArrayList();
List list2=新的ArrayList();
对于(int i=0;i<10;i++){
列表1.add(random.nextDouble());
}
list2=list1//两个列表都有十个元素
清单1.clear()//两个列表现在都为空
这正常吗?我错过什么了吗?
如果我遍历第一个列表并逐个添加元素,则不会出现这种情况,只会出现
list2=list1
行。

我认为这是因为两个列表都指向内存中相同的值。用foreach循环填充列表。

我认为这是因为两个列表都指向内存中相同的值。只需使用foreach循环填充列表

list2 = list1; //Both lists have ten elements
这不会将
list1
复制到
list2
。它使变量
list2
引用与
list1
相同的列表。两个变量都指向同一个列表对象

之前

list1 -----> [ArrayList #1]

list2 -----> [ArrayList #2]
之后

list1 --+--> [ArrayList #1]
        |
list2 --+    [ArrayList #2]   (orphaned, will be garbage collected)
要将第一个列表的元素复制到第二个列表,请执行以下操作:

list2.addAll(list1);
(如果
list2
不是空的,您还需要
list2.clear()

这不会将
list1
复制到
list2
。它使变量
list2
引用与
list1
相同的列表。两个变量都指向同一个列表对象

之前

list1 -----> [ArrayList #1]

list2 -----> [ArrayList #2]
之后

list1 --+--> [ArrayList #1]
        |
list2 --+    [ArrayList #2]   (orphaned, will be garbage collected)
要将第一个列表的元素复制到第二个列表,请执行以下操作:

list2.addAll(list1);
(如果
list2
不是空的,您还需要
list2.clear()

这不会将
list1
复制到
list2
,而是使
list2
引用(指向)list1。由于
list1
list2
现在都指向同一个列表,因此使用
list1
list2
并不重要,因为两者都将作用于同一个列表

如果要复制它,请执行(添加元素后):

final List list2=新的数组列表(list1);
这也意味着
List list2=new ArrayList()
是多余的

这不会将
list1
复制到
list2
,而是使
list2
引用(指向)list1。由于
list1
list2
现在都指向同一个列表,因此使用
list1
list2
并不重要,因为两者都将作用于同一个列表

如果要复制它,请执行(添加元素后):

final List list2=新的数组列表(list1);

这也意味着
List list2=new ArrayList()
是多余的。

可能重复的可能重复应该使用而不是
foreach
。这可能更有效。与其使用
foreach
,不如使用。这可以更有效。