iterator.remove() 在java中的所有情况下都是稳健的吗?

发布于 2024-08-07 12:02:42 字数 92 浏览 5 评论 0原文

正如 C++ 中的 iterator.remove() 不是 100% 安全或稳健 java 是否可以通过 iterator.remove() 保证 100% 的鲁棒性?

As in C++ iterator.remove() is not 100% safe or robust
does java guarantees 100% robustness with iterator.remove()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

思慕 2024-08-14 12:02:42

离开马特的评论(谁真正值得赞扬)

http://java.sun.com/javase/6/docs/api/java/util/Iterator.html#remove%28%29

说:

void 删除()

从底层集合中删除迭代器返回的最后一个元素(可选操作)。每次调用 next 时只能调用此方法一次。一个人的行为
如果在迭代过程中以除调用此方法之外的任何方式修改基础集合,则迭代器未指定。

所以……是的,在某些情况下可能会发生意外/不安全的行为。

Going off of matt's comment (who really deserves the credit)

http://java.sun.com/javase/6/docs/api/java/util/Iterator.html#remove%28%29

says:

void remove()

Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to next. The behavior of an
iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.

So...... yes, there are conditions under which unexpected/unsafe behaviour can occur.

愿与i 2024-08-14 12:02:42

是的,它很强大,因为它是在接口上定义的,因此必须适用于实现它的任何集合。但是,有一些警告来自 Javadoc

  • 这是一个可选操作 - 并非所有提供 Iterator 的东西都需要实现 remove()
  • 它只能在每次调用 next( )
  • 如果在枚举期间修改基础集合,除了调用 remove() 之外,这是不可靠的其他

Yes, it's robust in that it's defined on the interface and thus has to work on any collection where it's implemented. However, there are several caveats that come from the Javadoc:

  • It's an optional operation - not all things that provide an Iterator need to implement remove()
  • It can only be called once for every call to next()
  • It's not reliable if the underlying collection is modified during enumeration other than by calling remove()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文