加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:27:19 所属栏目:Java 来源:网络整理
导读:因为在任何线程中没有内部和合理的解释. 请给我确切的理由. 对于插入顺序,它足以维护单链接列表,但为什么不呢? 在这种情况下双链表如何增加性能? 所有的方法都是从hashmap xpt 4方法继承的,那么hashmap的迭代器不会维护顺序,而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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读