文档章节

从源码分析:LinkedHashMap的get方法

o
 osc_bkdv2it5
发布于 2019/08/19 16:01
字数 362
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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;
    }
}
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

SikuliX简介及安装

一、简单介绍 SikuliIDE和Sikuli Script就是现在的SikuliX,最新版本是SikuliX1.1.0, 部分兼容Sikuli JAVA API,支持Python和Ruby,SikuliX通过定位图像和键盘鼠标来操作GUI(图形化用户界面...

osc_r5t7sskd
25分钟前
6
0
Above the Median

Above the Median 农夫约翰把他的N(1 <= N <= 100,000)奶牛排在一排来衡量他们的高度,牛i有:高度H_I(1 <= H_I <= 1,000, 000,000)纳米 – 因为FJ认为他需要精确测量!他想选择一些连续...

osc_3k29rnjy
26分钟前
6
0
Above the Median

Above the Median 农夫约翰把他的N(1 <= N <= 100,000)奶牛排在一排来衡量他们的高度,牛i有:高度H_I(1 <= H_I <= 1,000, 000,000)纳米 – 因为FJ认为他需要精确测量!他想选择一些连续...

osc_8nnvoyb1
27分钟前
9
0
python3连接mysql 稍微进阶 + 日期处理

1.踩了个操作中文的坑,结果发现之前的文章中有强调了,在连接处加:charset="utf8" conn = pymysql.connect(host = '127.0.0.1', unix_socket = '/tmp/mysql.sock', user = 'root' , passwo......

osc_fipgtxy8
28分钟前
6
0
Above the Median

Above the Median 农夫约翰把他的N(1 <= N <= 100,000)奶牛排在一排来衡量他们的高度,牛i有:高度H_I(1 <= H_I <= 1,000, 000,000)纳米 – 因为FJ认为他需要精确测量!他想选择一些连续...

osc_cj3zzdzw
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部