【问题标题】:No ListIterator in LinkedHashMap and LinkedHashSetLinkedHashMap 和 LinkedHashSet 中没有 ListIterator
【发布时间】:2014-12-04 07:15:22
【问题描述】:

虽然文档明确指出 LinkedHashMap 和 LinkedHashSet

维护一个贯穿其所有条目的双向链表

我不明白为什么这些实现不返回 ListIterator 来导航下一个和上一个。 有人知道引擎盖下的限制吗?

【问题讨论】:

    标签: java listiterator


    【解决方案1】:

    ListIterator 开启了通过它们“在迭代器的当前位置”插入的可能性。但这打破了 LinkedHashMap/Set 本身强加的顺序,因为他们的合同规定列表顺序将严格等于插入顺序。

    【讨论】:

    • 听起来很合理,但令人困惑的是 LinkedList 确实返回了 ListIterator。与我提到的结构类似,LinkedList 是双链接的,应该保持原来的插入顺序。
    • 没有。 LinkedList 允许在指定位置插入。
    • 我明白了,因为它实现了 List 接口,而 LinkedHashMap/Set 没有。然后,在获取反向迭代器时,双链接很有用。
    【解决方案2】:

    您不能直接遍历键/值对的数据结构,它不是集合。即使在内部有一个记住插入顺序的双向链表,您仍然必须以标准方式获取迭代器。

    在这些数据结构上有一些方法可以返回键、值或条目(键+值)的集合:keySet()values()entrySet(),您可以从中获取迭代器。

    也许你想要的是map.entrySet().iterator() 这里,虽然我同意这是一组,而且顺序在技术上是未指定的......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2018-12-21
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      相关资源
      最近更新 更多