运行环境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为空值