在循环中使用迭代器而不会引起任何异常

时间:2020-08-19 05:36:41

标签: java iterator

我使用了迭代器类来解决问题。 我认为HashSet的iterator()方法返回其迭代器的集合。 但是,每当我运行此代码(尤其是第5行)时,即使我已检查迭代器是否包含下一个元素,也会发生ConcurrentModificationException。

对不起,我的英语不好,但是我真的很想找出我的代码出了什么问题并解决问题。

for (int i = 0; i < N; i++) {
    int input = scan.nextInt();
    iterator = set.iterator();
    while (iterator.hasNext()) {
        int num = iterator.next();
        if (!set.contains(num + input)) set.add(num + input);
    }
}

1 个答案:

答案 0 :(得分:0)

将添加项存储在本地集/列表中。

整体迭代后,只需将它们全部添加

Set toAdd = new HashSet();
for (int i = 0; i < N; i++) {
    int input = scan.nextInt();
    iterator = set.iterator();
    toAdd.clear();
    while (iterator.hasNext()) {
        int num = iterator.next();
        if (!set.contains(num + input)) toAdd.add(num + input);
    }
    set.addAll(toAdd);
}