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

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

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

1、for循环遍历list

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

   这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。

2、增强for循环

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

   这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。

3、iterator遍历

复制代码

1Iterator<String> it = list.iterator(); 2while(it.hasNext()){ 3 String x = it.next(); 4 if(x.equals("del")){ 5 it.remove(); 6 } 7}

复制代码

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

  总结:

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

JS中arr.forEach()如何跳出循环

示例我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环呢?使用break会报错,使用return也不能跳出循环。使用break将会报错:vararr使用return也不能跳出整个循环:vararr那么在用forEach()遍历数组时要如何才能跳出循环呢?经过查找资料后,我找到了两种方法可以实现跳出

java基础语法循环结构

循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。Java中主要的循环结构:while循环(适用情况,固定次数循环)do…while循环(适用情况,“当.....”循环)for循环(适用情况,“直到....”循环)while循环while是最基本的循环,它的结构为:whi

Java 集合遍历与循环多种方式

前言Java中集合是非常常用非常重要的,应用是十分广泛的,作为集合这种数据结构,遍历循环方式也有很多种我们可以梳理总结不同的遍历方式,方便理解和运用List遍历方式1.List继承了Collection,是有序的列表。2.实现类有ArrayList、LinkedList、Vector、Stack等1.ArrayList是基于数组实现的,是

Java中遍历HashMap的5种方式

本教程将为你展示Java中HashMap的几种典型遍历方式。如果你使用Java8,由于该版本JDK支持lambda表达式,可以采用第5种方式来遍历。如果你想使用泛型,可以参考方法3。如果你使用旧版JDK不支持泛型可以参考方法4。1、通过ForEach循环进行遍历importjava.io.IOException;importjav

Java练习(三)——返回集合中的最大的和最小的元素

题目:在一个列表中存储以下元素:apple,grape,banana,pear,现要求将集合进行排序,返回集合中的最大的和最小的元素,并将排序后的结果打印在控制台上,要求的打印输出方法分别为默认toString输出、迭代器输出、for循环遍历输出和增强for循环输出。packagetest;importjava.util.;publicclassP

Java遍历List集合的4种方式

publicclassTest{publicstaticvoidmain(Stringargs){//循环遍历List的4中方法List<StringstrListnewArrayList<();strList