【发布时间】:2020-08-19 05:36:41
【问题描述】:
我使用迭代器类来解决一个问题。 我认为 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);
}
}
【问题讨论】:
-
在创建使用的
Iterator后,您不能修改Collection,除非通过Iterator#remove(),否则(很可能)不会获得ConcurrentModificationException。 -
关于编码风格的一个提示:将
set.add(num + input);单独放在一行。它不仅更具可读性,而且更适合调试,因为 Java 会告诉您正是该语句导致了异常。 -
@Slaw 感谢您的帮助。现在我明白了我的代码有什么问题。我应该尝试其他方法来解决这个问题。
-
@RalfKleberhoff 我接受你的建议。谢谢:D