mun*_*ikh 3 java list arraylist concurrentmodification listiterator
我在执行此代码时收到ConcurrentModificationException.我无法弄清楚它为什么会发生?
private void verifyBookingIfAvailable(ArrayList<Integer> list, int id) {
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
int value = iterator.next();
if (value == id) {
int index = list.indexOf(id);
if (index != -1) {
list.remove(index);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
Roh*_*ain 11
您正在使用list
引用本身删除列表中的元素,它可以抛出ConcurrentModificationException
.请注意,这可能有时会起作用,但并非总是如此,并且无法保证完美运行.
此外,即使您使用Iterator
迭代列表,您仍然不应该使用list.remove
,您应该只使用iterator.remove()
删除元素,否则它将没有任何区别,无论您使用迭代器还是增强的for循环.
所以,iterator.remove()
用来删除元素.
if (index != -1) {
iterator.remove(value);
}
Run Code Online (Sandbox Code Playgroud)
请参阅此文章: - java-efficient-equivalent-to-removal-while-iterating-a-collection以获取更详细的说明.
归档时间: |
|
查看次数: |
10402 次 |
最近记录: |