当我对List进行排序时,它的迭代器会发生什么?

Dan*_*ski 11 java collections concurrency

假设我有一个List对象和该列表的迭代器.

现在我对列表进行排序 java.util.Collections.sort()

  • 迭代器会发生什么?
  • 它的行为是否仍然定义,是否仍然可以使用?
  • 如果没有,我可以阻止销毁列表的迭代器吗?

我知道,这个问题可以通过改变程序设计来克服,例如克隆列表,但我特别想知道Java的"官方"行为.

Jon*_*eet 18

除了通过迭代器本身之外,迭代器在对其底层集合进行任何修改后通常都是无效的.(例如,ListIterator允许插入和移除.)

我当然希望任何迭代器在排序之后变得无效 - 如果它们不是,我不知道期望什么顺序.


sbl*_*ndy 16

大多数集合java.util都是"失败快速",如果底层集合发生变化,可能会抛出一个ConcurrentModificationException集合.应该指出的是,这是用于调试,因此不能保证.根据javadocs,对于所有死者来说都是如此AbstractList,但事实并非如此CopyOnWriteArrayList,这是用于多线程使用的.