List与remove

        /**
         * 集合中的remove方法存在问题,尤其是在循环中移除元素时,会导致“跳过”元素。
         */
        Integer[] array = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        List<Integer> list = new ArrayList<>(Arrays.asList(array));//不使用new ArrayList会导致报错
        //Exception in thread "main" java.lang.UnsupportedOperationException
        //	at java.util.AbstractList.remove(AbstractList.java:161)
        //	at Scratch.main(scratch_2.java:15)
        for (int i = 0; i < list.size(); i++) {
            Integer integer = list.get(i);
            //本应移除元素4,但是未移除。注意remove方法会改变List的size值,若非list.size()判断可能导致下标越界
            if (integer == 3 || integer == 4 || integer == 8) {
                list.remove(i);
//                i--;//使用i=i-1的方式,来正确遍历
            }
            System.out.printf("i=%2d,list size=%2d,list[i]=%2d,list=%s\n", i, list.size(), list.get(i), list);
        }
posted @   康舒服冰红茶  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示