比较Map实现类的不同点

比较

趁热打铁!比较最近学习到的几个Map实现类,也正好总结下!此比较是基于JDK1.8,直接用表格展示。

比较点 HashMap Hashtable IdentityHashMap LinkedHashMap TreeMap WeakHashMap
数据结构 数组
链表
红黑树
数组
链表
数组
(哈希探针表)
数组
链表
红黑树
红黑树 数组
链表
是否有序/可重复 无序不可重复 无序不可重复 无序不可重复 默认按插入顺序排列
可按访问顺序排列
不可重复
默认按自然顺序
可指定比较器进行自定义排序
不可重复
无序不可重复
键值对为null 允许 不允许 允许 允许 默认排序中键不允许,值允许
自定义排序中键值对都允许
允许
默认初始容量 16 11 64 16 16
默认加载因子 0.75 0.75 1/3 0.75 0.75
扩容策略 2 * capacity 2 * capacity + 1 2 * capacity 2 * capacity 2 * capacity
计算hash方式 hash ^ (hash >>> 16) hash & 0x7FFFFFFF (hash << 1) - (hash << 8) hash ^ (hash >>> 16) 有点复杂,就不贴了
计算索引 hash & (capacity - 1) hash % capacity hash & (capacity - 1) hash & (capacity - 1) hash & (capacity - 1)
新增节点 尾插法 头插法 尾插法 头插法
posted @ 2020-12-21 19:22  zliawk  阅读(99)  评论(0)    收藏  举报