java中的list集合的clear方法详解以及使用时遇到的问题

废话不多说,直接上代码------------------>

       String serialNo = "2118%000690;2118%000691;2118%000692;2118%000693;2118%000694;2118%000695;2118%000696;2118%000697;2118%000698;2118%000699;" +
                            "2118%000700;2118%000701;2118%000702;2118%000703;2118%000704;2118%000705;2118%000706;2118%000707;2118%000708;2118%000709";
        String[] splits = serialNo.toString().split(";");

        int len = splits.length;
        int size = len / 12; // 组成12个元素的个数
        int num = len % 12; // 剩下的数量,不够12个元素

        System.out.println("size: " + size);
        System.out.println("剩下的数量: " + num);

        // 父数组
        List<List<String>> pList = new ArrayList<>();

        // 子数组
        List<String> cList = new ArrayList<>();
        for (int j=1; j<=size; j++) {
            for (int k=12*(j-1); k<12*j; k++) {
                cList.add(splits[k]);
            }
            pList.add(cList);
            cList.clear(); // 清空,以便下次重新放入数据

        }

        System.out.println("pList1: " + pList);
        // 清空以便重新放入元素
        cList.clear();
        System.out.println("cList: " + cList);
        // 将剩余的,不满12的元素组成数组,放入父数组中
//        for (int m=size*12; m<size*12 + num; m++) {
            cList.add(splits[m]);
        }

        for (int m=0; m<num; m++) {
            cList.add(splits[12*size + m]);
        }
        pList.add(cList);
        System.out.println("pList2: " + pList);

字符串采用分隔符“;”分割之后,一共20元素,每12个为一组,放入到集合pList中,不足12个元素,也为一组放入到pList集合中。
使用了上面的算法,进行封装。结果出现了问题,在使用集合的clear()方法时清空了cList中的内容,导致pList中的内容也清空,只保留pList=1,而其中并没有值。
后面将剩余的8个元素放入到cList集合,再放入到pList集合中时,出现了两个cList,就是pList中有两个cList,且他们的元素内容一样。

pList2: [
[2118%000702, 2118%000703, 2118%000704, 2118%000705, 2118%000706, 2118%000707, 2118%000708, 2118%000709], 
[2118%000702, 2118%000703, 2118%000704, 2118%000705, 2118%000706, 2118%000707, 2118%000708, 2118%000709]
]

补充一点:

java中list集合通过clear()方法清空,只会将list中的对象变成垃圾回收清空,但是list对象还是存在。
但是通过list=null后,不仅列表中的对象变成了垃圾,为列表分配的空间也会回收,什么都不做与赋值NULL一样,说明直到程序结束也用不上列表list了,它自然就成为垃圾了.clear()只是清除了对象的引用,使那些对象成为垃圾.

这种情况,将cList中的对象变成垃圾而回收了,list还在。因此会出现上述原因:pList集合只有元素而没有值,等cList再次被填充元素时,pList就会有两个一样元素的cList。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值