Java中集合在遍历的时候如何新增
引言
在Java编程中,我们经常需要处理各种数据集合。而在集合的遍历过程中,有时候会遇到需要在遍历过程中新增元素的情况。然而,直接在遍历过程中新增元素可能引发一些问题,如ConcurrentModificationException
异常。本文将介绍如何解决在集合遍历过程中新增元素的实际问题,并提供示例代码。
问题背景
假设我们需要从一个集合中删除某些元素,并将删除的元素添加到另一个集合中。一种常见的做法是使用迭代器进行遍历,并在遍历过程中进行操作。然而,如果我们尝试在迭代器遍历过程中直接调用集合的add
方法来添加元素,就会抛出ConcurrentModificationException
异常。
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer num : list) {
if (num % 2 == 0) {
list.add(num * 2); // 尝试在遍历过程中添加元素
}
}
上述代码中,我们尝试在遍历集合list
的过程中添加元素,但是会抛出ConcurrentModificationException
异常。
解决方案
为了解决在集合遍历过程中新增元素的问题,我们可以使用一个中间集合来存储需要添加的元素,然后在遍历完成后将中间集合中的元素添加到原始集合中。
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> toAdd = new ArrayList<>(); // 中间集合
for (Integer num : list) {
if (num % 2 == 0) {
toAdd.add(num * 2); // 将需要添加的元素存储到中间集合中
}
}
list.addAll(toAdd); // 将中间集合中的元素添加到原始集合中
在上述代码中,我们首先创建一个中间集合toAdd
,用于存储需要添加到原始集合list
的元素。在遍历list
的过程中,我们判断元素是否满足特定条件,如果满足,则将该元素添加到中间集合toAdd
中。
遍历完成后,我们使用addAll
方法将中间集合toAdd
中的元素添加到原始集合list
中,从而完成新增元素的操作。
上述解决方案使用了中间集合来存储新增的元素,避免了在遍历过程中直接修改原始集合,从而避免了ConcurrentModificationException
异常的发生。
示例代码
下面是一个完整的示例代码,展示了如何在集合遍历过程中新增元素。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CollectionTraversalExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> toAdd = new ArrayList<>(); // 中间集合
for (Integer num : list) {
if (num % 2 == 0) {
toAdd.add(num * 2); // 将需要添加的元素存储到中间集合中
}
}
list.addAll(toAdd); // 将中间集合中的元素添加到原始集合中
System.out.println("原始集合:");
for (Integer num : list) {
System.out.print(num + " ");
}
System.out.println();
System.out.println("新增的元素:");
for (Integer num : toAdd) {
System.out.print(num + " ");
}
System.out.println();
}
}
运行上述示例代码,将会输出以下结果:
原始集合:
1 2 3 4 5
新增的元素:
4 8
结论
通过使用中间集合来存储新增的元素,在遍历完成后再将这些元素添加到原始集合中,我们成功