迭代器并发修改错误(Java)
Iterator concurrentmodificationerror (Java)
我的代码(下面是最基本的代码);当最后一次调用 hasNext()
时,它会抛出一个 ConcurrentModificationException
-
PS- 我试过调试它,但我似乎无法确定如何让它工作。如果我切换 remove 和 add 方法,它会起作用,但它会删除唯一的值,如果 somethingElse = something 这不是真正有用的。
PS- 我知道解决方法here;但我需要在删除导致问题的值后添加它
Iterator<String> itr = something.iterator();
while (itr.hasNext()){
String x = itr.next();
itr.remove();
somethingElse.add(x);
}
Edit- somethingElse 可以是某物或一个新对象(有一个循环决定了这一点)
这是我的第一个 post- 如果它太抽象或代码不清楚,请告诉我,我会 post 我的完整代码。
谢谢! :)
你的问题理解的是什么-任何时间点SomethingElse
都可以是something
。
如果是这种情况,您将在遍历列表并同时更新列表时得到 concurrentModificationException
。
所以 iterator
不知道底层发生了什么 data structure
它会在出现严重错误之前坚持 fail-fast
的政策。
(核心价值后跟JDK
:读写应该优雅地处理)
您的 .remove
抛出该错误是因为您在遍历列表的同时修改列表。您可以使用 ConcurrentHashMap 和 CopyOnWriteArrayList 类 来修复此错误。
请参阅 link here 以获得有关错误的明确解释。
我的代码(下面是最基本的代码);当最后一次调用 hasNext()
时,它会抛出一个 ConcurrentModificationException
-
PS- 我试过调试它,但我似乎无法确定如何让它工作。如果我切换 remove 和 add 方法,它会起作用,但它会删除唯一的值,如果 somethingElse = something 这不是真正有用的。
PS- 我知道解决方法here;但我需要在删除导致问题的值后添加它
Iterator<String> itr = something.iterator();
while (itr.hasNext()){
String x = itr.next();
itr.remove();
somethingElse.add(x);
}
Edit- somethingElse 可以是某物或一个新对象(有一个循环决定了这一点) 这是我的第一个 post- 如果它太抽象或代码不清楚,请告诉我,我会 post 我的完整代码。
谢谢! :)
你的问题理解的是什么-任何时间点SomethingElse
都可以是something
。
如果是这种情况,您将在遍历列表并同时更新列表时得到 concurrentModificationException
。
所以 iterator
不知道底层发生了什么 data structure
它会在出现严重错误之前坚持 fail-fast
的政策。
(核心价值后跟JDK
:读写应该优雅地处理)
您的 .remove
抛出该错误是因为您在遍历列表的同时修改列表。您可以使用 ConcurrentHashMap 和 CopyOnWriteArrayList 类 来修复此错误。
请参阅 link here 以获得有关错误的明确解释。