小言_互联网的博客

HashTable和HashMap的区别

441人阅读  评论(0)
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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场