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);
}
本文来自博客园,作者:康舒服冰红茶,转载请注明原文链接:https://www.cnblogs.com/pong137/p/15871784.html
欢迎转载,但请注明「作者」和「原文地址」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下