JAVA中循环删除list中元素的方法总结

https://www.cnblogs.com/PengChengLi/p/10789066.html

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。

  JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。

1、for循环遍历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跳出,则不会触发报错。

3、iterator遍历

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方式。

转载自:https://www.cnblogs.com/pcheng/p/5336903.html

(0)

相关推荐

  • 无语!这道迭代器笔试题,居然难倒很多人

    有位小朋友最近正在为年后换工作做准备,但是遇到一个问题,觉得很不可思议的一道笔试题.然后我把这道题发到技术群里,发现很多人居然不知道,很多都是连蒙带猜的说.感觉很有必要写一篇文章来说道说道. 涨薪必备 ...

  • idea 快速删除代码中的空行丶Java教程网

    有的时候,队友拒绝使用 Git 这里版本管理工具,而且 Mac 与 Windows 或者不同的 IDE 的关系,总是有时候队友编辑后端的文档就会出现很多空行.这个时候不想理他的话可以自己使用 正则 查 ...

  • 2021高考化学要点盘点!那些渗透到选择题中的八种典型元素化合物

    高中化学了,尤其是化学元素那,简直是太难学了.元素化合物的性质应用在高考试卷中,贯穿始终,无论是化学基本概念.化学基本理论.化学计算.化学实验等各个方面,其题型灵活.作用之大.运用之广! 而且同学们查 ...

  • 大爆炸理论遭到挑战:我们可能生活在一个循环的宇宙中

    在一个循环的宇宙中,膨胀和坍缩周期交替,宇宙无始无终. 宇宙诞生的标准故事大致是这样的:大约140亿年前,不知从哪里来的巨大能量物质爆炸了. 在短暂的快速爆炸的瞬间,能量的爆发使宇宙像气球一样膨胀起来 ...

  • 钢铁中的15种残余元素知识

    钢中的残余元素问题是冶金工业面临的重要问题之一.在炼钢过程中,炼钢原料(包括铁水.废钢及铁合金等)会将大量杂质元素带入炼钢炉中.其中一部分杂质元素可以去除,但仍有一部分杂质元素将留在钢中,这一部分杂质 ...

  • 如何删除Word中最下方的空白页?

    我们在进行Word编辑的时候会发现在最下方有一个空白页,无论是退格键还是删除键都无法删除,下面小编就来教大家如何解决吧! 1.我们能够在文档的最下方发现有一页空白页,无论如何也删除不掉. 2.先将光标 ...

  • 如何快速删除word中多余的空行

    在我们使用word进行文档编辑的时候,由于不同文档对文本的格式要求不尽相同,可能需要删除多余的空行,再如从网页上复制的内容往往会有多余的空行,如何快速删除这些空行呢,其操作步骤如下: 为了方便理解,我 ...

  • 在线学习中学习者对游戏化元素偏好的研究

    本文由<电化教育研究>授权发布 作者:王春丽 李东阁 张焱娜 肖月 陈仕琦 摘要 整合游戏化学习理念是解决在线学习动机难以维持的方法之一,但对于落实该理念载体的游戏化元素,目前的理论和实证 ...

  • 中传谢伦灿:文化基因存在于民众集体记忆中的普遍性文化内涵元素

    中传谢伦灿:文化基因存在于民众集体记忆中的普遍性文化内涵元素

  • 如何删除AI中的画笔描边

    我们绘制图画笔描边之后,如何行删除描边呢?一起来学习吧. 1.首先我们绘制一个路径进,添加上画笔描边. 2.在画笔的面板中,点击右上角的按钮. 3.弹出的下拉菜单中,点击--移除画笔描边的选项. 4. ...