分析 java.util.LinkedHashMap

介绍

该实现与HashMap不同的是它维护一个双向链表,可以使HashMap有序。与HashMap一样,该类不安全。

结构

和HashMap的结构非常相似,只不过LinkedHashMap是一个双向链表

LinkedHashMap 分为两种节点 Entry 和 TreeNode 节点

Entry 节点结构:

class Entry<K,V> extends HashMap.Node<K,V> {  
    Entry<K,V> before, after;  
    Entry(int hash, K key, V value, Node<K,V> next) {  
        super(hash, key, value, next);  
    }  
}

before 和 after 是双向链表中的前继和后继节点

TreeNode 节点和 HashMap 中的一样

从这里能看出 LinkedHashMap 是一个双向链表

LinkedHashMap 有如下属性:

transient LinkedHashMap.Entry<K,V> head;
transient LinkedHashMap.Entry<K,V> tail;
final boolean accessOrder;

head 和 tail 很好理解就是双向链表的头和尾

HashMap 中没有 accessOrder 这个字段,这也是与 HashMap 最不同的地方,该类有两种取值分别代表不同的意思 :

  • true,按照访问顺序排序
  • false,按照插入顺序排序

HashMap预留的一些方法

HashMap 预留了一些方法提供给 LinkedHashMap 使用

// LinkedHashMap重写了以下四个方法来保证双向队列能够正常工作
// 创建一个Node节点
No
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值