【问题标题】:Do we need the previous element in a linked list?我们需要链表中的前一个元素吗?
【发布时间】:2013-03-29 11:56:11
【问题描述】:

HashMap的实现中,链表用于表示桶中的元素。 每个条目都有一个指向下一个条目的元素。请参阅:Ref。但是,在LinkedList 类的实现中,每个元素都有对其前一个元素的引用,而其下一个元素参见Ref。只是想弄清楚为什么previous 在一个链表中很重要,而在另一个链表中不重要?

【问题讨论】:

  • 因为它在一个中使用而不在另一个中使用。只需在LinkedList 的代码中搜索previous 即可了解它为何如此重要。由于 YAGNI 原理,hash map 中没有previous

标签: java collections linked-list hashmap


【解决方案1】:

EntryHashMap 的内部类)不是通用链表的一部分(就像LinkedList 一样)。它的唯一目的是向前迭代它以寻找一个元素。所以它不需要previous 引用。

【讨论】:

    【解决方案2】:

    之前的参考使 LinkedList 成为双向 List,这使得反向迭代 List 成为可能。

    【讨论】:

    • 好的,但为什么这对一个人很重要,而对另一个人不重要?
    【解决方案3】:

    严格来说,链表中不需要对前一个元素的引用。 java.util.LinkedList 实际上是一个双向链表。这是有效执行以下操作所必需的:

    上述操作对Map.Entry的链表没有用。

    请注意,虽然getLast() 是列表接口的LinkedList 附加项,但上述接口需要另外两个。

    【讨论】:

    • 我可以看到它对以前的帮助。它如何帮助 add() getLast()?
    【解决方案4】:

    LinkedList 是一种通用实现。您可能想向后迭代它。对于地图,在搜索存储桶时,only 会向前迭代。由于不需要向后迭代,因此没有实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多