LinkedHashMap源码阅读

LinkedHashMap源码阅读

首先看名字,大概就知道了它的特性,首先具有Linked链表的访问有序,又具有HashMap的快速访问特性。
对于LinkedHashMap可以认为是HashMap和LinkedList两者相结合。
基本实现思想就是多态,重写继承的父类HashMap中的方法。

//LinkedHashMap的结构
public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>
{
    //只定义了两个属性:
    //双向链表的头节点
    private transient Entry<K,V> header;

    //true表示最近最少使用次序,false表示插入顺序
    private final boolean accessOrder;

    //...
}

LinkedHashMap一共提供了五个构造方法,其中四个都是默认accessOrder为false,表示 默认采用插入顺序维持去除键值对的次序,第五个可由程序员自定义accessOrder

既然LinkedHashMap继承了HashMap那么,看看它做了什么,才能维护这个顺序:
首先Entry中的属性:

K key
V value
Entry<K,V> next
int hash

Entry<K,V> before
Entry<K,V> after

前四个是继承Map.Entry中的,后面两个before和after是用来维护Entry的插入顺序。
注意: next是用于维护HashMap制定table位置上连接的Entry的顺序
内部结构
内部结构链表

HashMap中有好几个给LinkedHashMap回调的方法,在它本身是空实现。

    // Callbacks to allow LinkedHashMap post-actions
    void afterNodeAccess(Node<K,V> p) { }
    void afterNodeInsertion(boolean evict) { }
    void afterNodeRemoval(Node<K,V> p) { }

LinkedHashMap对上面的方法进行了重写,做的操作就是对链表的操作。

参考: Java集合之LinkedHashMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值