手机
当前位置:查字典教程网 >编程开发 >Java >java中for循环删除集合陷阱
java中for循环删除集合陷阱
摘要:首先看下面的代码:importjava.util.LinkedList;importjava.util.List;publicclassDe...

首先看下面的代码:

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循环删除集合陷阱】相关文章:

java类中生成jfreechart,返回图表的url地址 代码分享

java中匿名内部类解读分析

Java字符判断的小例子

java中获取类加载路径和项目根路径的5种方式分析

java中的key接口解析

java循环练习的简单代码实例

java中sdk与jdk的区别详细解析

使用Enumeration和Iterator遍历集合类详解

java中 IO 常用IO操作类继承结构分析

java中的正则操作方法总结

精品推荐
分类导航