`

如何正确遍历删除List中的元素,你会吗?

    博客分类:
  • java
阅读更多

遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题。下面主要看看以下几种遍历删除List中元素的形式:

1.通过增强的for循环删除符合条件的多个元素

2.通过增强的for循环删除符合条件的一个元素

3.通过普通的for删除删除符合条件的多个元素

4.通过Iterator进行遍历删除符合条件的多个元素

 

  1. /**  
  2.  * 使用增强的for循环  
  3.  * 在循环过程中从List中删除非基本数据类型以后,继续循环List时会报ConcurrentModificationException  
  4.  */    
  5. public void listRemove() {    
  6.     List<Student> students = this.getStudents();    
  7.     for (Student stu : students) {    
  8.         if (stu.getId() == 2)     
  9.             students.remove(stu);    
  10.     }    

 

 

  1. /**  
  2.  * 像这种使用增强的for循环对List进行遍历删除,但删除之后马上就跳出的也不会出现异常  
  3.  */    
  4. public void listRemoveBreak() {    
  5.     List<Student> students = this.getStudents();    
  6.     for (Student stu : students) {    
  7.         if (stu.getId() == 2) {    
  8.             students.remove(stu);    
  9.             break;    
  10.         }    
  11.     }    
  12. }  

 

 

 

  1. /**  
  2.  * 这种不使用增强的for循环的也可以正常删除和遍历,  
  3.  * 这里所谓的正常是指它不会报异常,但是删除后得到的  
  4.  * 数据不一定是正确的,这主要是因为删除元素后,被删除元素后  
  5.  * 的元素索引发生了变化。假设被遍历list中共有10个元素,当  
  6.  * 删除了第3个元素后,第4个元素就变成了第3个元素了,第5个就变成  
  7.  * 了第4个了,但是程序下一步循环到的索引是第4个,  
  8.  * 这时候取到的就是原本的第5个元素了。  
  9.  */    
  10. public void listRemove2() {    
  11.     List<Student> students = this.getStudents();    
  12.     for (int i=0; i<students.size(); i++) {    
  13.         if (students.get(i).getId()%3 == 0) {    
  14.             Student student = students.get(i);    
  15.             students.remove(student);    
  16.         }    
  17.     }    
  18. }    

 

 

  1. /**  
  2.  * 使用Iterator的方式可以顺利删除和遍历  
  3.  */    
  4. public void iteratorRemove() {    
  5.     List<Student> students = this.getStudents();    
  6.     System.out.println(students);    
  7.     Iterator<Student> stuIter = students.iterator();    
  8.     while (stuIter.hasNext()) {    
  9.         Student student = stuIter.next();    
  10.         if (student.getId() % 2 == 0)    
  11.             stuIter.remove();//这里要使用Iterator的remove方法移除当前对象,如果使用List的remove方法,则同样会出现ConcurrentModificationException    
  12.     }    
  13.     System.out.println(students);    
  14. }    

 

分享到:
评论

相关推荐

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

    当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...

    正确遍历删除List中的元素方法(推荐)

    以下是几种常见的遍历删除List元素的方法及其注意事项: 1. **通过增强的for循环删除元素** - **问题**:在增强的for循环(foreach)中直接删除元素会导致`ConcurrentModificationException`,因为这种方式不允许...

    C++ STL list 遍历删除出错解决方案

    本篇文章主要探讨的是在使用STL list时遇到的遍历删除元素过程中常见的错误及其解决方案。 错误用法通常出现在尝试同时遍历和删除list中的元素时。以下是三种常见的错误做法: 1. 错误用法一: 在这个例子中,迭代...

    HashMap和List遍历方法及如何遍历删除元素总结

    HashMap和List遍历方法及如何遍历删除元素总结 HashMap和List都是Java中最常用的数据结构,它们都可以用来存储和操作数据。然而,在遍历和删除元素时,需要小心地处理,以免出现问题。下面总结了HashMap和List的...

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    在Java编程中,遍历并删除集合(如List或Set)中的元素是一项常见的操作,但如果不正确地执行,可能会导致`ConcurrentModificationException`异常。这个异常通常在尝试修改正在迭代的集合时出现,因为Java的集合迭代...

    Iterator遍历过程中list删除导致异常

    当你想在迭代过程中删除元素时,应该使用`Iterator`的`remove()`方法,而不是直接调用集合的`remove()`方法。这样,`Iterator`会正确处理集合的内部状态,避免异常: ```java List&lt;String&gt; list = new ArrayList...

    C#在foreach遍历删除集合中元素的三种实现方法

    C#中,foreach遍历删除集合中元素是很常见的操作,但是删除元素时,集合的大小和元素索引值会发生变化,从而导致在foreach中删除元素时会抛出异常。下面我们将介绍三种实现方法,帮助大家更好地理解和使用C#。 方法...

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

    前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: ...原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照

    Java如何在List或Map遍历过程中删除元素

    在Java编程中,遍历并删除List或Map中的元素是一个常见的任务,但如果不理解其内部机制,可能会导致一些未预期的问题。本文将深入探讨在Java中如何安全地在List和Map遍历过程中删除元素。 首先,我们来看List的遍历...

    66丨迭代器模式(中):遍历集合的同时,为什么不能增删集合元素?1

    为了解决这个问题,Java中的`List`接口提供了`remove()`方法的另一种版本——`Iterator.remove()`,这个方法可以安全地在遍历过程中删除当前元素。这是因为迭代器在调用`remove()`时,会更新自身的状态以反映元素已...

    【Java面试题】List如何一边遍历,一边删除?

    在Java编程中,遍历并删除List集合是一个常见的操作,但在实际编程中,如果不使用正确的方法,可能会导致`java.util.ConcurrentModificationException`异常。本文主要针对这个面试题,详细讲解如何在遍历List的同时...

    解决JAVA遍历List集合,删除数据时出现的问题

    在遍历List集合时,我们可以使用for循环来删除元素,但是我们需要注意的是,在删除元素后,我们需要将迭代变量i的值减1,以便在下一次迭代中处理正确的元素。 解决方法2:先删除后面的元素 另一种解决方法是,先...

    完美解决python遍历删除字典里值为空的元素报错问题

    #### 三、正确的遍历删除方法 **3.1 使用临时列表存储待删除的键** **步骤说明:** 1. **创建临时列表**:首先获取字典的所有键,并将其转换为列表形式。 2. **遍历键列表**:在遍历过程中检查每个键对应的值是否...

    java-遍历map

    - 在遍历`Map`时,如果在遍历过程中尝试修改`Map`(例如添加或删除元素),可能会引发`ConcurrentModificationException`异常。因此,在遍历的同时不要修改`Map`。 - 使用流API遍历时,虽然代码更简洁,但性能上可能...

    C#集合遍历时删除和增加元素的方法

    总结起来,处理C#集合遍历过程中的元素修改,特别是删除和增加操作,需要使用支持在遍历中修改的集合类型,如`LinkedList&lt;T&gt;`,并且在操作过程中需要特别注意元素引用的更新,以避免数据丢失或遍历错误。在实际编程...

    C#遍历集合与移除元素的方法

    然而,当在遍历过程中需要修改集合(如移除元素)时,`foreach`循环可能会导致`Collection was modified; enumeration operation may not execute.`的异常。这是因为`foreach`内部使用的是迭代器,而迭代器不支持在...

    对python list 遍历删除的正确方法详解

    初学者往往会直接在遍历过程中使用.pop()方法删除元素,这通常会导致程序报错,例如“IndexError: list index out of range”。原因是删除元素后,列表的长度发生了改变,但是循环次数没有相应减少,导致索引与列表...

    python列表的逆序遍历实现

    例如,在一个包含数字的列表中,如果我们要删除所有包含数字"2"的元素,直接正向遍历并使用`remove()`函数会遇到问题,因为删除元素会导致后续元素的下标发生变化,使得某些元素在遍历过程中被遗漏。 错误的正向...

Global site tag (gtag.js) - Google Analytics