一文读懂HashMap和HashTable的区别以及常见面试题( 四 )

\n

HashMap数据结构图

\n

下图的table数组的每个格子都是一个桶 。 负载因子就是map中的元素占用的容量百分比 。 比如负载因子是0.75 , 初始容量(桶数量)为16时 , 那么允许装填的元素最大个数就是16*0.75 = 12 , 这个最大个数也被成为阈值 , 就是map中定义的threshold 。 超过这个阈值时 , map就会自动扩容 。

\n

存储实现:put(keyvlaue)

\n

首先我们先看源码public V put(K key V value) {        //当key为null , 调用putForNullKey方法 , 保存null与table第一个位置中 , 这是HashMap允许为null的原因
       if (key == null)            return putForNullKey(value);        //计算key的hash值 , 此处对原来元素的hashcode进行了再次hash
       int hash = hash(key.hashCode());                  ------(1)        //计算key hash 值在 table 数组中的位置

推荐阅读