Java 这是处理列表时的正确行为吗?
如果我创建一个列表并添加十个元素,然后将列表对象复制到另一个列表并调用list.clear在第二个列表中,两个列表都被清除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
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
,不如使用。这可以更有效。