import java.util.*;
public class object {
public static void main(String[] args) {
String str1 = new String("abcde");
String str2 = new String("abcde");
String str3 = new String("abcde");
String str4 = new String("abcde");
String str5 = new String("abcde");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());
for (int i = 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
}
运行结果不是
list.size()=5
after remove:list.size()=0
居然是
list.size()=5
after remove:list.size()=2
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
解决方法倒过来遍历list
for (int i = list.size()-1; i > =0; i--) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
}
}
2.每移除一个元素以后再把i移回来
for (int i = 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
i=i-1;
}
}
3.使用iterator.remove()方法删除
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
}
System.out.println("after remove:list.size()=" + list.size());
}
}
分享到:
相关推荐
当尝试在循环内部删除元素时,Java的迭代机制无法处理这种行为,因此抛出`ConcurrentModificationException`。 **正确的遍历删除方式** 为了避免上述异常,有以下两种正确的方法来遍历并删除List和Set集合中的元素...
在编程领域,集合是数据组织的基本形式之一,而List接口是Java中集合框架的重要组成部分。List接口继承自Collection,它代表一个有序的元素序列,允许重复元素,并且提供了索引访问。本文将深入探讨List接口及其相关...
总结,`ListIterator`是Java中处理`List`的强大工具,它提供了更细粒度的控制,使得在遍历过程中进行元素操作变得简单而高效。熟练掌握`ListIterator`的使用,对于编写高效、灵活的Java代码大有裨益。
然而,当涉及到动态添加或删除元素时,数组并不方便,因为它在创建时必须指定长度,并且一旦创建,长度就不能改变。这时,我们可以转向使用集合类,如ArrayList,它提供了更灵活的方法来管理元素。 本示例中,我们...
要解决List遍历删除元素的问题,可以使用Iterator来遍历List,并使用Iterator的remove方法来删除元素。这样可以避免ConcurrentModificationException异常。 HashMap的遍历方法 1. 使用keySet()方法 使用keySet()...
如果在遍历过程中需要移除元素,必须使用`it.remove()`,直接调用`list.remove()`会导致并发修改异常(ConcurrentModificationException)。 ### 第二种:增强型for循环(foreach) ```java for (A a : list) { /...
在 Java 中,对 list 进行遍历和删除操作是一种常见的需求。本文将介绍 Java list 利用遍历进行删除操作的 3 种方法,并通过示例代码对每种方法进行详细的解释。 方法一:使用 for 循环 在使用 for 循环遍历 list ...
迭代器通常需要在删除元素时通过自身的`remove()`方法来确保内部状态的一致性。如果直接调用集合的`remove()`方法,迭代器可能无法跟踪这些变化,从而引发异常。 2. **代码示例与分析**: - **操作1**:创建一个新...
在Java编程语言中,`List.removeAll()`方法是一个非常实用的函数,它允许我们从列表中一次性移除所有指定元素。这个方法是集合框架的一部分,它提供了高效的方式来进行元素的删除操作。本文将深入探讨`removeAll()`...
在Java编程中,遍历Map是一种常见的操作方式,尤其在处理键值对数据时尤为重要。本文档主要介绍了几种常用的遍历`Map`的方法,包括使用传统的迭代器、增强for循环(引入于JDK 1.5)以及对`TreeSet`进行排序的示例。 ...
如果在遍历过程中需要删除元素,只能使用`it.remove()`,而不能直接使用`list.remove()`,否则可能会引发并发访问错误。 2. 使用增强型`for`循环(也称为foreach循环): ```java List list = new ArrayList(); // ...
Java List集合方法及遍历过程代码解析 Java List集合是 Java 编程语言中的一种常用的数据结构,可以存储多个...List 集合是 Java 编程语言中的一种常用的数据结构,提供了多种操作元素的方法和遍历过程的实现方式。
如果需要在遍历过程中删除元素,必须使用`it.remove()`方法,不能直接调用`list.remove()`,否则会出现并发访问异常。 2. **增强型for循环(foreach)遍历** Java 5引入了增强型for循环,也称为foreach循环,使得...
在 Java 编程中,遍历 List 集合是一项常见的任务,特别是在处理数据或执行迭代操作时。这里,我们详细探讨了五种遍历 List 集合的方法,并结合 List 接口概述来理解其核心特性。 1. **普通 for 循环遍历** 这是最...
在Java中,去除单链表中的重复元素可以通过使用哈希集合(HashSet)来实现,该集合用于存储已经遍历过的元素。在遍历链表的过程中,我们将每个元素与集合中的元素进行比较,如果发现重复,则删除链表中的该元素。 ...
在 Java 编程中,判断一个 `List` 中是否存在重复元素是一项常见的需求。特别是在数据处理、验证或分析等场景中,确保数据的唯一性对于维持数据完整性至关重要。 #### 核心概念解析 在给定的代码片段中,作者提供...
然而,由于foreach不能直接修改正在遍历的集合,所以在移动元素时需要额外的逻辑。以下是一个示例: ```java List<String> list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); for (int ...
在Java编程中,遍历并删除List中的元素是一项常见的操作,但如果不小心处理,可能会遇到错误,如`ConcurrentModificationException`。以下是几种常见的遍历删除List元素的方法及其注意事项: 1. **通过增强的for...
根据提供的文件信息,标题与描述均指向了Java中List的操作方法。然而,给出的部分内容却是一段关于导入Excel文件到Web应用中的代码片段,并没有直接涉及List的具体操作方法。因此,我们将结合标题与描述,围绕Java中...
总结来说,在Java中遍历List或Map并删除元素时,应该避免在迭代过程中直接修改集合,而应该使用迭代器来管理删除操作。对于List,可以使用索引下标加调整索引,或者直接使用迭代器;对于Map,应根据需求选择键迭代或...