通过查看HashMap底层源码的初始默认容量16,加载因子0.75.
HashMap有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动扩容之前可以达到多满的一种度量。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行扩容、rehash操作(即重建内部数据结构),扩容后的哈希表将具有两倍的原容量。
为了减少冲突的概率,当hashMap的数组长度到了一个临界值就会触发扩容,把所有元素rehash再放到扩容后的容器中,所以说rehash是一个非常耗时的操作。
而这个临界值是由加载因子和当前容器的容量大小来确定:DEFAULT_INITIAL_CAPACITY*DEFAULT_LOAD_FACTOR ,即默认情况下是16x0.75=12时,就会触发扩容操作。
通过上述了解,那么就会在面试中经常被提出的问题:为什么加载因子初始化是0.75呢?
- 加载因子过高,例如为1,这样会减少空间开销,提高空间利用率,但同时会增加查询时间的成本
- 加载因子过低,例如为0.5,虽然可以减少查询时间,但是空间利用率很低,同时提高了rehash操作的次数
在设置初始容量时应该考虑到映射中所需的条