新手常犯的错误
可能很多新手(包括当年的我,哈哈)第一时间想到的写法是下面这样的:
public static void main(String[] args) {
List<String> platformList = new ArrayList<>();
platformList.add("博客园");
platformList.add("CSDN");
platformList.add("掘金");
for (String platform : platformList) {
if (platform.equals("博客园")) {
platformList.remove(platform);
}
}
System.out.println(platformList);
}
然后满怀信心的去运行,结果竟然抛java.util.ConcurrentModificationException异常了,翻译成中文就是:并发修改异常。
foreach循环在实际执行时,其实使用的是Iterator,使用的核心方法是hasnext()和next()。
既然不能使用foreach来实现,那么我们该如何实现呢?
主要有以下3种方法:
使用Iterator的remove()方法
使用for循环正序遍历
使用for循环倒序遍历
接下来一一讲解。
2. 使用Iterator的remove()方法
使用Iterator的remove()方法的实现方式如下所示:
public static void main(String[] args) {
List<String> platformList = new ArrayList<>();
platformList.add("博客园");
platformList.add("CSDN");
platformList.add("掘金");
Iterator<String> iterator = platformList.iterator();
while (iterator.hasNext()) {
String platform = iterator.next();
if (platform.equals("博客园")) {
iterator.remove();
}
}
System.out.println(platformList);
}
使用for循环正序遍历
使用for循环正序遍历的实现方式如下所示:
public static void main(String[] args) {
List<String> platformList = new ArrayList<>();
platformList.add("博客园");
platformList.add("CSDN");
platformList.add("掘金");
for (int i = 0; i < platformList.size(); i++) {
String item = platformList.get(i);
if (item.equals("博客园")) {
platformList.remove(i);
i = i - 1;
}
}
System.out.println(platformList);
}
这种实现方式比较好理解,就是通过数组的下标来删除,不过有个注意事项就是删除元素后,要修正下下标的值:
i = i - 1;
4. 使用for循环倒序遍历
使用for循环倒序遍历的实现方式如下所示:
public static void main(String[] args) {
List<String> platformList = new ArrayList<>();
platformList.add("博客园");
platformList.add("CSDN");
platformList.add("掘金");
for (int i = platformList.size() - 1; i >= 0; i--) {
String item = platformList.get(i);
if (item.equals("掘金")) {
platformList.remove(i);
}
}
System.out.println(platformList);
}
这种实现方式和使用for循环正序遍历类似,不过不用再修正下标
分享到:
相关推荐
当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...
本篇文章主要探讨的是在使用STL list时遇到的遍历删除元素过程中常见的错误及其解决方案。 错误用法通常出现在尝试同时遍历和删除list中的元素时。以下是三种常见的错误做法: 1. 错误用法一: 在这个例子中,迭代...
List集合遍历和删除操作
本测试着重关注四种常见的集合类型:ArrayList、Dictionary, TValue>、List以及DataSet,它们各自在遍历性能上的差异。遍历性能是衡量代码执行效率的重要指标,尤其在大数据量处理时,高效的遍历方法能显著提升程序...
要解决List遍历删除元素的问题,可以使用Iterator来遍历List,并使用Iterator的remove方法来删除元素。这样可以避免ConcurrentModificationException异常。 HashMap的遍历方法 1. 使用keySet()方法 使用keySet()...
在Java编程中,遍历并删除List集合是一个常见的操作,但在实际编程中,如果不使用正确的方法,可能会导致`java.util.ConcurrentModificationException`异常。本文主要针对这个面试题,详细讲解如何在遍历List的同时...
如果你需要对每个文件或子目录进行进一步的操作,如读取、删除或重命名,`listFiles()`是更好的选择。 3. **递归遍历**:如果目录中还有子目录,我们需要递归地遍历它们。通常,我们会创建一个递归函数,当遇到子...
初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_list)): if num_list[i] == 2: num_...
Java list利用遍历进行删除操作3种方法解析 Java list 是一种常用的数据结构,经常被用来存储和操作数据。在 Java 中,对 list 进行遍历和删除操作是一种常见的需求。本文将介绍 Java list 利用遍历进行删除操作的 ...
在Java编程中,`ListIterator`是`List`接口提供的一种特殊的迭代器,它具有双向遍历的能力,不仅可以向前遍历列表,还可以向后遍历。`ListIterator`还提供了在遍历过程中添加、修改和删除元素的功能,使得对列表的...
在 Java 编程中,遍历 List 集合是一项常见的任务,特别是在处理数据或执行迭代操作时。这里,我们详细探讨了五种遍历 List 集合的方法,并结合 List 接口概述来理解其核心特性。 1. **普通 for 循环遍历** 这是最...
总之,在Android中遍历和删除指定类型的文件是一项常见的任务,涉及到文件操作、遍历算法以及条件判断。开发者需要了解`java.io.File`类的使用,并根据需要处理不同类型的文件。在实际应用中,还应注意权限管理以及...
本资料主要探讨如何遍历Java中的List集合,包括基本的迭代器方式、增强for循环(foreach)以及流(Stream)API的使用。下面我们将深入讲解这些遍历方法。 1. 迭代器(Iterator)遍历: Java中的List接口定义了...
解决JAVA遍历List集合删除数据时出现的问题 JAVA 中遍历List集合时删除数据出现的问题是很多开发者经常遇到的问题,本文对该问题进行了详细的讲解,总结了多种解决方法,并对问题的原因进行了深入分析。 问题描述...
在Java编程中,`Iterator`是用于遍历集合(如`List`, `Set`等)的重要工具。然而,当我们尝试在使用`Iterator`遍历集合的过程中直接修改集合时,可能会遇到`ConcurrentModificationException`异常。这个异常通常发生...
如果从头到尾正序遍历删除的话,有些符合删除条件的元素会成为漏网之鱼; 正序删除举例: List<string> tempList = new List() { "a","b","b","c" }; for (int i = 0; i < tempList.Count; i++) { if ...
**错误的遍历删除方式** 错误的示例代码如下: ```java Set<CheckWork> set = this.getUserDao().getAll().get(0).getActionCheckWorks(); for (CheckWork checkWork : set) { if (checkWork.getState() == 1) { ...