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

Wesley13
• 阅读 659

印象中循环删除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遍历

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

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

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

  这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。

  总结:

  (1)循环删除list中特定一个元素的,可以使用三种方式中的任意一种,但在使用中要注意上面分析的各个问题。

  (2)循环删除list中多个元素的,应该使用迭代器iterator方式。

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
JS中arr.forEach()如何跳出循环
示例我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环呢?使用break会报错,使用return也不能跳出循环。使用break将会报错:vararr使用return也不能跳出整个循环:vararr那么在用forEach()遍历数组时要如何才能跳出循环呢?经过查找资料后,我找到了两种方法可以实现跳出
Wesley13 Wesley13
3年前
java基础语法循环结构
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。Java中主要的循环结构:while循环(适用情况,固定次数循环)do…while循环(适用情况,“当.....”循环)for循环(适用情况,“直到....”循环)while循环while是最基本的循环,它的结构为:whi
kenx kenx
3年前
Java 集合遍历与循环多种方式
前言Java中集合是非常常用非常重要的,应用是十分广泛的,作为集合这种数据结构,遍历循环方式也有很多种我们可以梳理总结不同的遍历方式,方便理解和运用List遍历方式1.List继承了Collection,是有序的列表。2.实现类有ArrayList、LinkedList、Vector、Stack等1.ArrayList是基于数组实现的,是
待兔 待兔
3年前
Java中遍历HashMap的5种方式
本教程将为你展示Java中HashMap的几种典型遍历方式。如果你使用Java8,由于该版本JDK支持lambda表达式,可以采用第5种方式来遍历。如果你想使用泛型,可以参考方法3。如果你使用旧版JDK不支持泛型可以参考方法4。1、通过ForEach循环进行遍历importjava.io.IOException;importjav
执键写春秋 执键写春秋
3年前
Java练习(三)——返回集合中的最大的和最小的元素
题目:在一个列表中存储以下元素:apple,grape,banana,pear,现要求将集合进行排序,返回集合中的最大的和最小的元素,并将排序后的结果打印在控制台上,要求的打印输出方法分别为默认toString输出、迭代器输出、for循环遍历输出和增强for循环输出。packagetest;importjava.util.;publicclassP
Wesley13 Wesley13
3年前
Java遍历List集合的4种方式
publicclassTest{publicstaticvoidmain(Stringargs){//循环遍历List的4中方法List<StringstrListnewArrayList<();strList
Wesley13 Wesley13
3年前
JAVA 数组遍历
一、遍历List1、增强for循环StringarrnewString{"xx","yy","zz"};for(Stringelt:arr){System.out.println(elt);}2、下标的方式String
Wesley13 Wesley13
3年前
Java循环结构
Java循环结构for,while和do...while顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构。while循环do...while循环for循环在Java5中引入了一种主要用于数组的增强
Wesley13 Wesley13
3年前
Java删除List元素的方法
一、正序删正序删,如果只删除至多1个元素,那只需要在删除后使用break语句跳出循环即可,如果需要删除多个元素,若不注意控制当前列表的size和下一个元素的index,容易报_java.lang.IndexOutOfBoundsException_异常publicstaticvoidremove(List<Stringlis
小万哥 小万哥
9个月前
深入理解 Java 循环结构:while、do while、for 和 for-each 循环
Java循环循环可以执行一个代码块,只要达到指定的条件。循环很方便,因为它们节省时间,减少错误,并使代码更易读。JavaWhile循环while循环会循环执行一个代码块,只要指定的条件为真:语法javawhile(condition)//要执行的代码块在下