for循环中删除元素的问题

java语言中,for循环有三种实现方法:

1、for循环遍历list

for(int i=0;i<list.size();i++){
    if(list.get(i).equals("del"))
        list.remove(i);
}

2、增强for循环

for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

3、iterator遍历

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

注意:只有第三种可以正确的在for循环中删除对应元素

第一种方式,由于ArrayList底层使用数组方式实现,当删除其中某一元素时,其余数组下标会前移,导致继续进行删除时会略过下一元素,最终的结果也会异常

第二种方式,会抛出ConcurrentModificationException的错误,即并发修改异常,具体异常原因可参考《Java ConcurrentModificationException异常原因和解决方法》

综上所述,在for循环中删除元素最好使用迭代器的方式

发布了60 篇原创文章 · 获赞 57 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qixinbruce/article/details/88591213
今日推荐