首页 > 代码库 > for循环删除list元素陷阱
for循环删除list元素陷阱
首先我们先看一段代码,如下:
1 List<String> list=new ArrayList<String>(); 2 list.add("123"); 3 list.add("234"); 4 list.add("134"); 5 list.add("657"); 6 list.add("198"); 7 list.add("654"); 8 for (int i = 0; i < list.size(); i++) 9 {10 String str=list.get(i);11 if(str.contains("1"))12 {13 //list.remove(i);14 list.remove(str);15 }16 17 }18 System.out.println(list);
运行结果
结果也是对的,我们现在修改一下list中元素中的值,把第2个元素中加上一个1,代码如下:
List<String> list=new ArrayList<String>(); list.add("123"); list.add("2314"); list.add("134"); list.add("657"); list.add("198"); list.add("654"); for (int i = 0; i < list.size(); i++) { String str=list.get(i); if(str.contains("1")) { //list.remove(i); list.remove(str); } } System.out.println(list); }
运行结果:
结果不是我们所期望的,那么错在了哪里呢??
在for循环中,当删除第一个元素“123”之后,此时的list元素包括“2314” “134” “657” “198” “654”,再进行下一次循环时i=1,指向的str=“134”,把“2314”给跳了过去,所以不能把包含“2314”的元素删除,只是删除了 list中的元素奇数的包含1的元素
所以我们需要在删除完元素之后将i-1处理
1 List<String> list=new ArrayList<String>(); 2 list.add("123"); 3 list.add("2314"); 4 list.add("134"); 5 list.add("657"); 6 list.add("198"); 7 list.add("654"); 8 for (int i = 0; i < list.size(); i++) 9 {10 String str=list.get(i);11 if(str.contains("1"))12 {13 //list.remove(i);14 list.remove(str);15 i--;16 }17 18 }19 System.out.println(list); 20 21 }
for循环删除list元素陷阱
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。