我正在使用arrayList data.so我有4个数组列表。我有3个arraylist填充数据作为临时商店arraylist根据选择。我的代码如下。
if(App.SubPosition==0){
if(custList.size()>0)
custList1=custList;
}
if(App.SubPosition==1){
if(custList.size()>0)
custList2=custList;
}
if(App.SubPosition==2){
if(custList.size()>0)
custList3=custList;
}
App.SubPosition = position;
String json = null;
//custList.clear();
Log.e("Log","custList1="+custList1.size());
Log.e("Log","custList2="+custList2.size());
Log.e("Log","custList3="+custList3.size());
Log.e("Log","custList3="+custList.size());
custList.clear();
Log.e("Log","custList1="+custList1.size());
Log.e("Log","custList2="+custList2.size());
Log.e("Log","custList3="+custList3.size());
Log.e("Log","custList3="+custList.size());
运行上面的代码,它将显示如下所示的日志。
如果我只清除了custlist,那么custlist1 arraylist也很清楚。
为什么会发生?
您的回答将不胜感激
答案 0 :(得分:1)
你永远不会有多个名单。您有一个列表和多个对该列表的引用。
您可以使用
创建副本custList1 = new ArrayList<>(custList);
这将创建一个新的ArrayList
实例,复制数据。
答案 1 :(得分:1)
您对同一个ArrayList使用不同的名称。而不是那样,尝试做类似的事情:
ArrayList<whatever> copy = new ArrayList<>();
copy.addAll(originalArray);
或
ArrayList<whatever> copy = new ArrayList<>(originalArray);
注意:每次想要&#34;复制&#34;时都要执行 new ,因为如果你不这样做,你将会添加每一个元素多次,将有一个巨大的数组而不是副本。
答案 2 :(得分:0)
您应该使用addAll()方法。
if(App.SubPosition==0){
if(custList.size()>0)
custList1.addAll(custList);
}
if(App.SubPosition==1){
if(custList.size()>0)
custList2.addAll(custList);
}
if(App.SubPosition==2){
if(custList.size()>0)
custList3.addAll(custList);
}
您也可以使用clone()。