HashTable | HashMap | |
---|---|---|
继承的父类和接口 | extends:Dictionary<K,V> implements:Map<K,V>, Cloneable, java.io.Serializable |
extends:AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable |
默认容量 | 11 | 16 |
table的初始化时机 | 构造函数时 | 第一次添加元素时 |
线程安全 | 线程安全 但不是绝对安全 |
线程不安全 |
数据遍历方式 | Enumeration或Iterator | Iterator |
快速失败机制 | Iterator遍历时支持 Enumeration遍历时不支持 |
支持 |
添加重复key | 不能 | 能 |
key或value为null | 都不能 | 都可以 |
hash值计算下标的方法 | hashSeed ^ k.hashCode(); 没有扰动处理,index重复率高 计算index: int index = (hash & 0x7FFFFFFF) % tab.length; 保证hash值不为负数 |
h ^= k.hashCode(); h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); 计算index: h & (length-1); |
Entry数组长度 | 11 | 16,并始终保持2的幂 |
LoadFactor负荷因子 | 0.75 | 0.75 |
超过负荷时,内部数据的调整方式 | 2倍+1,然后重新计算所有元素的存储位置 保证是奇数,取余后的结果相比于偶数更加分散 重复率更低 |
2倍,然后重新计算所有元素的存储位置 |
转载:https://blog.csdn.net/hrnne/article/details/106455364
查看评论