[英]Java Arraylist clearing : how clear() works
我有一个对象的2D列表mypath List<List<Object>> mypath = new ArrayList<List<Object>>();
。 假设我有以下代码行
mypath.add(temppath);
System.out.println("mypath: "+mypath.get(mypath.size()-1));
temppath.clear();
System.out.println("mypath: "+mypath.get(mypath.size()-1));
我从第一个print语句中看到一个对象列表,但是从第二个print中看到一个空列表。 当我清除temppath时,mypath的元素也会被清除。 有办法解决这个问题吗? 我可以清除temppath,而不清除mypath的最后一个元素吗?
将temppath添加到mypath时,不创建新对象,而是添加对现有对象的引用。 因此,您对此对象所做的一切都将反映在引用它的任何位置。
解决此问题的一种可能方法是创建temppath的副本并将其添加到mypath。
因为它们都在堆中引用相同的Object
,所以就像它一样
mypath.add(new ArrayList<Object>(temppath));
这将创建temppath
副本
如果它对您的应用程序无害
如果您尝试重用temppath
以继续向mypath
添加新的元素List
,请创建一个新的List
实例,而不是在其上调用clear()
。
// temppath.clear();
temppath = new ArrayList<Object>();
List#clear()
不给你一个新的 List
实例,你最终结算刚才添加到同一列表mypath
。 只调用clear()
来处理元素。
Rivu,
您正在清除temppath,但不是从mypath中删除它。 因此,在第二次尝试时,您再次引用temppath,这是空白的。
如果你想删除temppath使用
mypath.remove(temppath);
代替
temppath.clear();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.