博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础知识(二) LinkedHashMap 源码详解
阅读量:6034 次
发布时间:2019-06-20

本文共 1621 字,大约阅读时间需要 5 分钟。

#知识点 继承于HashMap 实现于Map接口 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>

LinkedHashMap 继承了 HashMap 最主要的区别就是有序。内部使用散列链表 红黑树实现。注意此Map不是线程安全的,如果需要同步使用请使用ConcurrentHashMap 或者 Collections.synchronizedMap。

其实它内部使用的还是HashMap的方法,主要区别在以下三个方法中。节点访问后、节点插入后、节点移除后做一些事情。 void afterNodeAccess(Node<K,V> p) { } void afterNodeInsertion(boolean evict) { } void afterNodeRemoval(Node<K,V> p) { }

#常量参数 很多常量用的都是他爸的

//继承了HashMap Node 内部定义两个参数 static class Entry
extends HashMap.Node
{ Entry
before, after; Entry(int hash, K key, V value, Node
next) { super(hash, key, value, next); } }复制代码

transient LinkedHashMap.Entry<K,V> head; //双向链表的头对象数据 transient LinkedHashMap.Entry<K,V> tail; //双向链表的尾对象数据 #源码解析

//其实就是一个移动链表的过程 void afterNodeAccess(Node
e) { // move node to last LinkedHashMap.Entry
last; if (accessOrder && (last = tail) != e) { LinkedHashMap.Entry
p = (LinkedHashMap.Entry
)e, b = p.before, a = p.after; p.after = null; if (b == null) head = a; else b.after = a; if (a != null) a.before = b; else last = b; if (last == null) head = p; else { p.before = last; last.after = p; } tail = p; ++modCount; } }复制代码

转载于:https://juejin.im/post/5d0468e3e51d45599e019dab

你可能感兴趣的文章
pip更改国内源
查看>>
Linux 抓包工具 tcpdump
查看>>
使用Visual Studio Code对Node.js进行断点调试
查看>>
IIS企业案例系列之九:TMG发布多个HTTPS站点终结篇
查看>>
解决NGINX PHP "No input file specified"
查看>>
2015年10月26日作业
查看>>
tracert
查看>>
perl:warning:Setting locale failed解决办法
查看>>
telegraf+influxdb+grafana开源监控架构
查看>>
浅析vanish
查看>>
我的友情链接
查看>>
全球首个大规模光电芯片到来
查看>>
linux 之字符集编码
查看>>
网站开发流程以及HTML5简介(九)
查看>>
小博老师解析Java核心技术 ——JSwing高级菜单制作
查看>>
BT5的U盘完整安装
查看>>
Saltstack系列:安装Saltstack
查看>>
windows设置administrator密码为空
查看>>
浅析Linux初始化init系统,第一部分:sysvinit(附Slackware init系统)
查看>>
Jenkins使用教程之用户权限管理(包含插件的安装)
查看>>