为什么arraylist清楚地对于temporery和原始?

时间:2016-04-25 13:01:05

标签: java android arraylist

我正在使用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());

运行上面的代码,它将显示如下所示的日志。

enter image description here

如果我只清除了custlist,那么custlist1 arraylist也很清楚。

为什么会发生?

您的回答将不胜感激

3 个答案:

答案 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()。