for循环删除list元素陷阱
2014-11-06 17:19
337 查看
首先我们先看一段代码,如下:
运行结果
结果也是对的,我们现在修改一下list中元素中的值,把第2个元素中加上一个1,代码如下:
运行结果:
结果不是我们所期望的,那么错在了哪里呢??
在for循环中,当删除第一个元素“123”之后,此时的list元素包括“2314” “134” “657” “198” “654”,再进行下一次循环时i=1,指向的str=“134”,把“2314”给跳了过去,所以不能把包含“2314”的元素删除,只是删除了 list中的元素奇数的包含1的元素
所以我们需要在删除完元素之后将i-1处理
List<String> list=new ArrayList<String>(); list.add("123"); list.add("234"); 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);
运行结果
结果也是对的,我们现在修改一下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处理
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); i--; } } System.out.println(list); }
相关文章推荐
- for循环删除list中多个元素出现的误区
- 犯了一个菜鸟必备的很郁闷的错误:for循环删除LinkedList集合中元素
- 在循环中删除list中的元素
- 陷阱01:使用for删除集合中的元素时的陷阱:
- 遍历删除 list 中符合条件的元素时(for, Remove),应从后往前进行
- STL:循环删除容器中元素的方法和陷阱
- LinkedList,ArrayList在foreach循环遍历时可以删除元素!!!
- STL:循环删除容器中元素的方法和陷阱
- STL:循环删除容器中元素的方法和陷阱
- java中循环遍历删除List和Set集合中元素的方法
- 循环删除list中多个元素
- java ArrayList循环遍历并删除元素的常见陷阱
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- java 中,循环删除list中的多个元素实现
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- List元素的几种for循环方式及其点评
- Java - List遍历、判断、删除元素时的陷阱
- Java 循环遍历删除set list中的元素