关于LinkedHashMap的同步功能,我对某一点感到困惑。这是令我感到困惑的相关Javadoc。我的困惑点是,为什么remove方法在这里很特殊,而它却提到了“通过迭代器自己的remove方法除外”?

http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

所有此类的所有collection视图方法返回的collection的iterator方法返回的迭代器都是快速失败的:如果在创建迭代器之后的任何时间对结构进行结构修改,则可以通过迭代器自己的remove方法进行任何方式的修改,迭代器将抛出ConcurrentModificationException。因此,面对并发修改,迭代器会快速干净地失败,而不会在未来的不确定时间内冒任意,不确定的行为的风险。

提前致谢,

最佳答案

基本上,不允许在遍历地图时对其进行结构化修改,因为这样做会使迭代器无效。

Iterator.remove()专门为此免除,使您可以轻松编写如下代码:

Iterator<E> it = coll.iterator();
while (it.hasNext()) {
  E val = it.next();
  if (some_condition) {
    it.remove();
  }
}

07-24 09:49
查看更多