比较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) | |
| 新增节点 | 尾插法 | 头插法 | 尾插法 | 头插法 |
浙公网安备 33010602011771号