下面小编就为大家带来一篇 java 中循环删除 list 中元素的方法总结小编觉得挺不错的, 现在就分享给大家, 也给大家做个参考一起跟随小编过来看看吧
印象中循环删除 list 中的元素使用 for 循环的方式是有问题的, 但是可以使用增强的 for 循环, 然后今天在使用时发现报错了, 然后去科普了一下, 再然后发现这是一个误区下面就来讲一讲伸手党可直接跳至文末看总结
JAVA 中循环遍历 list 有三种方式 for 循环增强 for 循环(也就是常说的 foreach 循环)iterator 遍历
1for 循环遍历 list
- for(int i=0;i<list.size();i++){
- if(list.get(i).equals("del"))
- list.remove(i);
- }
这种方式的问题在于, 删除某个元素后, list 的大小发生了变化, 而你的索引也在变化, 所以会导致你在遍历的时候漏掉某些元素比如当你删除第 1 个元素后, 继续根据索引访问第 2 个元素时, 因为删除的关系后面的元素都往前移动了一位, 所以实际访问的是第 3 个元素因此, 这种方式可以用在删除特定的一个元素时使用, 但不适合循环删除多个元素时使用
2 增强 for 循环
- for(String x:list){
- if(x.equals("del"))
- list.remove(x);
- }
这种方式的问题在于, 删除元素后继续循环会报错误信息 ConcurrentModificationException, 因为元素在使用的时候发生了并发的修改, 导致异常抛出但是删除完毕马上使用 break 跳出, 则不会触发报错
3iterator 遍历
- Iterator<String> it = list.iterator();
- while(it.hasNext()){
- String x = it.next();
- if(x.equals("del")){
- it.remove();
- }
- }
这种方式可以正常的循环及删除但要注意的是, 使用 iterator 的 remove 方法, 如果用 list 的 remove 方法同样会报上面提到的 ConcurrentModificationException 错误
总结:
(1)循环删除 list 中特定一个元素的, 可以使用三种方式中的任意一种, 但在使用中要注意上面分析的各个问题
(2)循环删除 list 中多个元素的, 应该使用迭代器 iterator 方式
来源: http://www.phperz.com/article/18/0223/359203.html