因为在任何线程中都没有内部和合理的解释。 请给我确切的理由。为什么linkedhashmap维护迭代的双向链表
对于插入顺序它足以维持单链表,但为什么不呢?
在这种情况下,双向链表如何提高性能?
所有的方法都是从hashmap xpt 4方法继承的,那么hashmap的迭代器不维护顺序,而linkedhashmap维护顺序?
因为在任何线程中都没有内部和合理的解释。 请给我确切的理由。为什么linkedhashmap维护迭代的双向链表
对于插入顺序它足以维持单链表,但为什么不呢?
在这种情况下,双向链表如何提高性能?
所有的方法都是从hashmap xpt 4方法继承的,那么hashmap的迭代器不维护顺序,而linkedhashmap维护顺序?
为了保持插入顺序有双链表。在任何时间点,您都可以前进节点或后退节点。但是如果你有一个LinkedList,如果你的指针移动到最后一个元素,你需要再次从初始点开始,并且不能移动到前一个节点上。
我不认为双向链表帮助排序,它只是使遍历列表更容易 –
如果您看到内部HashMap是基于linkedList。所以如果你有一些信息,比如之前或之后插入了哪个节点,那简直是一种排序。 – Prashant
单独链接列表足以维护订单。这不是他们为什么在这种情况下使用双向链表的正确解释。 –
的LinkedHashMap的基本维护两个指针即每个条目 - : 之前,
后的名称表明这两个指针被用于排序目的,并且用于插入的情况下,调整指针或删除。
你是对的,你只需要维护一个单独的链接列表来跟踪广告订单。但为了有效地维护一个单一的链表,你实际上需要一个双向链表。
考虑三个条目,以便
A ---> B ---> C
假设你删除B
。显然A
现在应该指向C
。但是,除非您知道B
之前的条目,否则无法有效地说明哪个条目现在应该指向C
。要解决这个问题,你需要输入指向两个方向。
---> --->
A B C
<--- <---
这样,当你删除B
你可以看看之前的条目后B
(A
和C
)和更新,以便A
和C
指向对方。
LinkedHashMap
原因LinkedHashMap
维持插入顺序,而HashMap
没有,尽管除了4个方法都被继承外,其实它是非常巧妙的写法。大多数实施特定的操作都是HashMap.Entry
的成员,而不是HashMap
。 LinkedHashMap
有一个private static
类别LinkedHashMap.Entry
它扩展了static
类别HashMap.Entry
的HashMap
。例如,当您拨打put
或remove
时,LinkedHashMap
的代码可以与HashMap
的代码相同,因为它是条目本身,用于跟踪信息前后的信息。作为一个例子,在这里是在充分的代码LinkedHashMap.Entry.remove()
我被解释上述
private void remove() {
before.after = after;
after.before = before;
}
LinkedHashMap的可用于维持插入顺序和用于维持访问顺序。 LinkedHashMap继承了hashmap的相同功能,用于维护桶中的列表,所以用下一个参考。
为了维持他们采用双向链表的插入顺序(使用和之前之后引用),但是可以通过使用单链表来完成。同时他们必须实现访问顺序功能,并且他们需要经常移动元素到最后,并且需要频繁删除频繁删除他们使用双向链表。
我不认为双向链表帮助排序,它只是使遍历列表更容易 –
它不会使遍历更容易。它只是使得地图条目的移除更有效率。 –