一.三者的区别
HashTable | HashMap | ConcurrentHashMap | |
底层数据结构 | 数组+链表 | 数组+链表 | 数组+链表 |
key可为空 | 否 | 是 | 否 |
value可为空 | 否 | 是 | 否 |
线程安全 | 是 | 否 | 是 |
默认初始容量 | 11 | 16 | 16 |
扩容方式 | (oldSize << 1)+1 | oldSize << 1 | 桶的扩容 |
扩容时间 | size超过(容量*负载因子) | size超过(容量*负载因子) | 桶超数超过(容量*负载因子) |
hash | key.hashCode() | (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16) | (key.hashCode() ^ (key.hashCode() >>> 16)) & 0x7fffffff |
index计算方式 | (hash & 0x7FFFFFFF) % tab.length | (tab.length - 1) & hash | (tab.length - 1) & hash |
默认负载因子 | 0.75f | 0.75f | 0.75f |
二.源码剖析
1.HashTable