next() 元素耗尽时的并发修改
Concurrent modification when next() has exhausted elements
最近一直在阅读 Iterators。假设我们要为给定容器 class 构建一个 fail-fast 迭代器。在某个时间点,执行了以下代码;
Iterator<Object> it = myContainer.iterator();
while(it.hasNext())
System.out.println(it.next());
然后,我们对 myContainer
进行修改,使用一种名为 remove(int index
的方法):
myContainer.remove(2); // Assume at least 3 elements contained
如果 it.next()
现在被调用 ,并且根据官方文档,我们应该抛出 ConcurrentModificationException
的实例还是 NoSuchElementException
?也许更重要的是,这是否可以从官方文档中推断出来?
你应该投一个ConcurrentModificationException
。 NoSuchElementException
表示迭代器中没有更多元素。当您遇到并发修改时,它总是否决 NoSuchElementException。至少 Arraylist
和 LinkedList
是如何做到的。
最近一直在阅读 Iterators。假设我们要为给定容器 class 构建一个 fail-fast 迭代器。在某个时间点,执行了以下代码;
Iterator<Object> it = myContainer.iterator();
while(it.hasNext())
System.out.println(it.next());
然后,我们对 myContainer
进行修改,使用一种名为 remove(int index
的方法):
myContainer.remove(2); // Assume at least 3 elements contained
如果 it.next()
现在被调用 ,并且根据官方文档,我们应该抛出 ConcurrentModificationException
的实例还是 NoSuchElementException
?也许更重要的是,这是否可以从官方文档中推断出来?
你应该投一个ConcurrentModificationException
。 NoSuchElementException
表示迭代器中没有更多元素。当您遇到并发修改时,它总是否决 NoSuchElementException。至少 Arraylist
和 LinkedList
是如何做到的。