【问题标题】:Two java.util.Iterators to the same collection: do they have to return elements in the same order?两个 java.util.Iterators 到同一个集合:它们必须以相同的顺序返回元素吗?
【发布时间】:2012-05-30 21:17:48
【问题描述】:

这更像是一个理论问题。如果我有一个未排序的任意集合c,并且我通过调用c.iterator() 两次获得了两个java.util.Iterators,那么两个迭代器是否必须以相同的顺序返回c 的元素?

我的意思是,实际上他们可能总是会这样做,但他们是否是通过合​​同强制这样做的?

谢谢, 一月

【问题讨论】:

    标签: java api collections iterator contract


    【解决方案1】:

    不,他们不是。

    “没有关于元素的顺序的保证 返回(除非此集合是某个类的实例 提供保证)。”

    请参阅Collection#iterator api contract

    这包括从一个迭代器到下一个迭代器(因为它没有说明需要这样做)。

    还要考虑在获取这两个迭代器之间的基础集合中可能发生了一些变化!添加或删除的内容。

    【讨论】:

    • There are no guarantees concerning the order in which the elements are returned 。但是正如 OP 询问 c.iterator() 是否被调用两次,那么两个迭代器的结果将是相同的顺序。
    • 我的回答中也提到了这一点。
    【解决方案2】:

    迭代器的实现由特定的 Collection 类提供。 List 的迭代器将给出有序元素,而 Set 不会

    【讨论】:

    • 虽然这不是问题。
    • hmm...如果保证顺序,那么无论您调用多少次,您都会以相同的顺序获得元素(如 List 的情况),而在 set 的情况下则不会这样
    • 如果你这样说就够了。
    【解决方案3】:

    因为大多数数据结构默认没有排序,所以不确定它们是否会以相同的顺序迭代。

    如果您想要相同的顺序,您必须先对集合进行排序。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      相关资源
      最近更新 更多