java8 hashtable与hashmap的差异

运行环境jdk8.0

hashmap采用hash table数据结构,所有的方法均被sychronized修饰,初始容量为11的质数,0.75负载因子(在时间和空间的一个平衡方案)保证了hash算法的高效,效率差的hash算法导致Entry元素分布不均,导致分布不均,其导致的结果是新增元素需要遍历链表,这时增加了时间复杂度,删除和查询也都是同样的流程。

在hashtable中的hash算法

第一步为求key的hashcode值,

第二步hashcode & 0x7FFFFFFF位与运算,

第三步在与hashtable的总容量取模运算 % table.length;

这与hashmap中也有些差异,hashmap

第一步:相同调用object的hashcode方法;

第二步:高位运算 h>>>16 h为前一步的hashcode值

第三步:在通过hashcode 与 高位运算的结果算出hash表中所在的槽或者桶的位置

hashmap的初始容量为16,如果指定容量则会根据高位运算求出容量并在最后加1,理解为2的n次方 2,4,8,16,32依次类推

hashtable不允许value为空值

猜你喜欢

转载自flint0006.iteye.com/blog/2381824
今日推荐