java – 为什么linkedhashmap维持双向链接列表的迭代

前端之家收集整理的这篇文章主要介绍了java – 为什么linkedhashmap维持双向链接列表的迭代前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
因为在任何线程中没有内部和合理的解释.
请给我确切的理由.

>对于插入顺序,它足以维护单链接列表,但为什么不呢?
>在这种情况下双链表如何增加性能
>所有的方法都是从hashmap xpt 4方法继承的,那么hashmap的迭代器不会维护顺序,而linkedhashmap维护顺序呢?

解决方法

你是对的,你只需要维护一个单链表来跟踪插入顺序.但是为了有效地维护单链表,您实际上需要一个双向链表.

考虑三个条目顺序

A ---> B ---> C

假设你删除B.显然A现在应该指向C.但除非你知道B之前的条目,否则你无法有效地说明哪个条目应该指向C.要解决这个问题,你需要输入两个方向.

--->   ---> 
A      B      C
  <---   <---

这样,当您删除B时,您只需查看B(A和C)之前和之后的条目并进行更新,以便A和C指向对方.

LinkedHashMap维护插入顺序的原因,而HashMap没有,尽管除了4个方法之外,除了4个方法之外,它是非常聪明的.大多数实现特定的操作是HashMap.Entry的成员,而不是HashMap. LinkedHashMap有一个私有的静态类LinkedHashMap.Entry,它扩展了HashMap的静态类HashMap.Entry.当您调用put或remove时,例如,LinkedHashMap的代码可以与HashMap的代码相同,因为它是条目本身跟踪信息之前和之后.作为一个例子,下面是我上面解释的LinkedHashMap.Entry.remove()的完整代码

private void remove() {
    before.after = after;
    after.before = before;
}

猜你在找的Java相关文章