从源码分析:LinkedHashMap的get方法

LinkedHashMap中重写了HashMap的get方法,不止会取出所索要的节点的值,而且会调整LinkedHashMap中内置的链表中该键所对应的节点的位置,将该节点置为链表的尾部。

public V get(Object key) {
    Node<K,V> e;
    if ((e = getNode(hash(key), key)) == null)
        return null;
    if (accessOrder)
        afterNodeAccess(e);
    return e.value;
}
void afterNodeAccess(Node<K,V> e) { // move node to last
    LinkedHashMap.Entry<K,V> last;
    // 首先判断尾部节点是否为要移动的节点,如果不是的话才进入下一步的操作
    if (accessOrder && (last = tail) != e) {
        // 为e重新赋名,并保存其前一节点与后一节点
        LinkedHashMap.Entry<K,V> p =
            (LinkedHashMap.Entry<K,V>)e, b = p.before, a = p.after;
        // 将指向后一节点的指针清空
        p.after = null;
        // 如果没有前一节点,则将该节点的后一节点设为头节点,否则,将其前置节点的后节点指针指向p的后置节点
        if (b == null)
            head = a;
        else
            b.after = a;
        // 如果后置节点不为空,则将前置节点的后节点指针指向p的后置节点,否则,将last指向p的前置节点
        if (a != null)
            a.before = b;
        else
            last = b;
        // 如果last为空,说明没有前面的节点了,则将LinkedHashMap的头节点指向p,否则,将p的前节点指针指向last,last的后节点指针指向p
        if (last == null)
            head = p;
        else {
            p.before = last;
            last.after = p;
        }
        // 最后,将LinkedHashMap的尾节点指向p
        tail = p;
        ++modCount;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值