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

结论

通过使用中间集合来存储新增的元素,在遍历完成后再将这些元素添加到原始集合中,我们成功