正确在遍历中删除List元素

Posted 做个快乐的自己

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正确在遍历中删除List元素相关的知识,希望对你有一定的参考价值。

 

法一:使用普通for循环遍历

注意: 1.从头开始循环,每次删除后 i  减一。
            2.从尾开始循环。
 
  1. public class Main {  
  2.     public static void main(String[] args) throws Exception {  
  3.         List<Integer> list = new CopyOnWriteArrayList<>();  
  4.         for (int i = 0; i < 5; i++)  
  5.             list.add(i);  
  6.         for (int i = 0; i < list.size(); i++) { 
  7.             System.out.print(i + " " + list.get(i));  
  8.             if (list.get(i) % 2 == 0) {  
  9.                 list.remove(list.get(i));  
  10.                 System.out.print(" delete");  
  11.                 i--; // 索引改变!  
  12.             }  
  13.             System.out.println();  
  14.         }  
  15.     }  
  16. }  
 

法二:使用增强型for循环遍历

注意:不使用CopyOnWriteArrayList可以看到删除第一个元素时是没有问题的,但删除后继续执行遍历过程的话就会抛出ConcurrentModificationException的异常。

原因:因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错

  1. public class Main {  
  2.     public static void main(String[] args) throws Exception {  
  3.         List<Integer> list = new CopyOnWriteArrayList<>();  
  4.         for (int i = 0; i < 5; i++)  
  5.             list.add(i);  
  6.         // list {0, 1, 2, 3, 4}  
  7.         for (Integer num : list) {  
  8.             // index and number  
  9.             System.out.print(num);  
  10.             if (num % 2 == 0) {  
  11.                 list.remove(num);  
  12.                 System.out.print(" delete");  
  13.             }  
  14.             System.out.println();  
  15.         }  
  16.     }  
  17. }  

法三:使用iterator遍历

注意:使用iterator的remove()而不是list的remove()方法
 
  1. public class Main {  
  2.     public static void main(String[] args) throws Exception {  
  3.         List<Integer> list = new ArrayList<>();  
  4.         for (int i = 0; i < 5; i++)  
  5.             list.add(i);  
  6.         // list {0, 1, 2, 3, 4}  
  7.         Iterator<Integer> it = list.iterator();  
  8.         while (it.hasNext()) {  
  9.             // index and number  
  10.             int num = it.next();  
  11.             System.out.print(num);  
  12.             if (num % 2 == 0) {  
  13.                 it.remove();  
  14.                 System.out.print(" delete");  
  15.             }  
  16.             System.out.println();  
  17.         }  
  18.     }  
  19. }  
 
 

 

以上是关于正确在遍历中删除List元素的主要内容,如果未能解决你的问题,请参考以下文章

如何正确遍历删除List中的元素(普通for循环增强for循环迭代器iteratorremoveIf+方法引用)

详解遍历集合和遍历集合时删除集合元素

Python的list循环遍历中,删除数据的正确方法

JavaList遍历时删除元素的正确方式

C#遍历List并删除某个或者几个元素的方法

C#遍历List并删除某个或者几个元素的方法