【问题标题】:Java ListIterator RobustnessJava ListIterator 健壮性
【发布时间】:2018-04-10 23:10:58
【问题描述】:

我在 Java 中有一个简单的LinkedList,它有 10 个元素。在那种状态下,我得到一个普通的ListIterator,比如.listIterator(3)。如果我随后在列表中插入/删除其他元素,而不触及我拥有 ListIterator (也不是迭代器)的元素,ListIterator 仍然有效吗?

【问题讨论】:

  • 这将取决于您对List 的实现并记录在其中。一般情况下不会。
  • 我希望我可以避免自己实现具有这种行为的链表......我想我不得不这样做,遗憾的是......

标签: java listiterator robustness


【解决方案1】:

如果您在ListIterator 自己的方法之外修改java.util.LinkedList,则迭代器被掺假,如果您再次尝试使用它,将抛出ConcurrentModificationException

这在javadoc for linked list:

这个类的迭代器和listIterator返回的迭代器 方法是快速失败的:如果列表在任何结构上被修改 迭代器创建后的时间,除了通过 迭代器自己的remove或add方法,迭代器会抛出一个 并发修改异常。因此,面对并发 修改,迭代器快速而干净地失败,而不是 在不确定的时间冒着任意的、不确定的行为的风险 未来。

【讨论】:

  • s/will/may/(不适用于CopyOnWriteArrayList
  • 是的,我只是自己尝试过,在发布问题后我意识到我可以简单地测试它,并没有考虑它会引发异常.. 无论如何谢谢:)
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多