在循环中删除list中的元素
2011-10-19 12:59
337 查看
这个事情本身比较简单,但是在java中想直接实现却有些棘手。如果直接用for each的方式,删除其中的元素的话会报出ConcurrentModificationException异常。原因很简单,就是你改变了list,那么之前生成的迭代器就不能再继续工作了。
上面这个问题碰到很多次了,之前总是用比较猥琐的办法绕过去。比如只删除一个元素的话,找到记录下来再删除;或者干脆新建一个数组,把找到的东西移动过去。今天突然上网查了一下,发现了个很好的帖子,从正面解决了这个问题。
解决思路:利用for循环,将数组反向遍历。for循环可以解决在循环过程中改变列表不能继续的问题,因为用的是get方法取元素。反向便利解决了如果删除一个元素,后面的元素会向前移动的问题。这样一来就和普通的循环一样操作就可以了。
示例:
for (int i = list.size(); i >= 0; i--) {
if ((i + 1) % 2 == 0) {
list.remove(i);
}
}
感想:不是所有问题都是技术问题,很多时候一个好的思路就能巧妙的解决问题。
参考资料:http://tianlihu.iteye.com/blog/380671
2011-10-25补充:
今天有个同事提出了一个更好的方案,java的迭代器里面有支持删除的方法,当然要先显示的使用迭代器才可以。示例:
建议在做集合删除操作采用Iterator类中的remove方法:
Iterator<String> it = list.iterator();
while(it.hasNext()){
String value = it.next();
if(value.equals("5")){
it.remove();
}
}
上面这个问题碰到很多次了,之前总是用比较猥琐的办法绕过去。比如只删除一个元素的话,找到记录下来再删除;或者干脆新建一个数组,把找到的东西移动过去。今天突然上网查了一下,发现了个很好的帖子,从正面解决了这个问题。
解决思路:利用for循环,将数组反向遍历。for循环可以解决在循环过程中改变列表不能继续的问题,因为用的是get方法取元素。反向便利解决了如果删除一个元素,后面的元素会向前移动的问题。这样一来就和普通的循环一样操作就可以了。
示例:
for (int i = list.size(); i >= 0; i--) {
if ((i + 1) % 2 == 0) {
list.remove(i);
}
}
感想:不是所有问题都是技术问题,很多时候一个好的思路就能巧妙的解决问题。
参考资料:http://tianlihu.iteye.com/blog/380671
2011-10-25补充:
今天有个同事提出了一个更好的方案,java的迭代器里面有支持删除的方法,当然要先显示的使用迭代器才可以。示例:
建议在做集合删除操作采用Iterator类中的remove方法:
Iterator<String> it = list.iterator();
while(it.hasNext()){
String value = it.next();
if(value.equals("5")){
it.remove();
}
}
相关文章推荐
- Java中循环删除List中元素总结
- Java中循环删除List中元素总结
- java 中,循环删除list中的多个元素实现
- 循环删除List中的元素的问题-两种方式(不一样的结果)
- 谁说不能在循环list的时候,删除其中的元素??
- 循环删除list中元素的方法
- Java中如何循环删除一个集合(如List)中的多个元素
- Java 循环遍历删除set list中的元素
- JAVA中循环删除list中元素的方法总结
- LinkedList,ArrayList在foreach循环遍历时可以删除元素!!!
- go语言list循环删除元素(转载)
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中循环删除List中元素总结
- Java中循环删除List中元素总结
- List 循环删除多个元素
- 循环删除list中的元素
- 关于list循环删除元素,迭代器失效的问题
- Java中循环删除List中元素总结
- Java中循环删除List中元素总结
- foreach 循环,删除list中的元素是报错