java中for循环删除集合陷阱
程序员文章站
2022-04-25 11:06:53
...
首先看下面的代码:
import java.util.LinkedList; import java.util.List; public class DeleteCollection { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); for(int i=0;i<list.size();i++){ //循环删除集合中的元素 list.remove(i); } System.out.println("还剩余的元素个数:"+list.size()); } }
上述的代码按照思路应该是对的,输出的结果也应该是0
看下面实际输出的结果:
还剩余的元素个数:2
你也许会问为什么呢?因为集合的大小是动态变化的,当你删除一个元素之后,元素中的序号又重新排列,原来第二个应该删除的元素现在排在了第一个元素的位置,真正删除的却是第三个元素,依次类推,删除的是第一个、第三个、第五个、、、、如果在原来删除的代码中加入语句:System.out.println("即将删除的元素:"+list.get(i));即可验证。
加入上述语句后输出的结果:
即将删除的元素:a
即将删除的元素:c
即将删除的元素:e
还剩余的元素个数:2
解决办法:
究其原因是因为你要删除的元素往前面移动了,而你的i保存的值依旧往后走,所以如果让i不往后走,往前走一个,即可删除本来排在第二个位置的元素现在排在了第一个位置上的元素。
更改后的核心代码:
for(int i=0;i<list.size();i++){ System.out.println("即将删除的元素:"+list.get(i)); list.remove(i); i--; }
结果:
即将删除的元素:a
即将删除的元素:b
即将删除的元素:c
即将删除的元素:d
即将删除的元素:e
还剩余的元素个数:0
以上所述就是本文的全部内容了,希望大家能够喜欢。
更多java中for循环删除集合陷阱相关文章请关注PHP中文网!
上一篇: 批量操作初始化序列初始值
推荐阅读
-
JavaScript中关于for循环删除数组元素内容时出现的问题
-
Java中的增强for循环和break continue的使用 以及流程控制训练
-
mysql-请问:用java代码把不同的excel形式加载到MySQL数据库中(循环判断空就停止)?谢谢!
-
mysql-请问:用java代码把不同的excel形式加载到MySQL数据库中(循环判断空就停止)?谢谢!
-
Java实现过滤掉map集合中key或value为空的值示例
-
java中删除数组中重复元素方法探讨
-
java集合中list的用法代码示例
-
java集合中的list详解
-
Java中List for循环的6种写法总结(推荐)
-
Java中的循环笔记整理(必看篇)