1.何时调用resize()。
HashMap约等于一个链表和数组的集合,横排表示数组,纵排表示数组元素(也就是一个链表)。这个时候就出现了数组大小这定义。
当hashmap中的元素个数超过 数组大小*loadFactor(影响因子,一般为0.75) 时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,然后重新计算每个元素在数组中的位置 。hashmap中的元素到达一定级别,为了减轻数组中元素可能的碰撞,提高查询效率,就会执行resize方法。
2.影响因子为何是0.75。
为什么影响因子的大小一般为0.75 这是因为3/4与2的n次方相乘永远是整数,所以他的影响因子是0.75
3.默认数组为何是16。
这个数组的大小有两个容量,一个是Size一个是Capacity。
在HashMap中,有两个比较容易混淆的关键字段:size和capacity ,这其中capacity就是Map的容量,而size我们称之为Map中的元素个数。
简单打个比方你就更容易理解了:HashMap就是一个“桶”,那么容量(capacity)就是这个桶当前最多可以装多少元素,而元素个数(size)表示这个桶已经装了多少元素。