一、首先先介绍HashMap中一些成员变量的设置
1、size
size指的是HashMap中存放键值对元素的个数
2、modCount
指定是对键值对操作的次数相当于一个计数器
3、capacity
HashMap数组的容量或者称为长度
4、loadFactor(加载因子||负载因子)
一般设置为0.75
二、HashMap中元素是怎样存储的?什么时候会扩容?以及为什么加载因子默认设置为0.75而不是其他值?
1、HashMap在JDK1.8之前存储元素的数组是在entry<k,v>,1.8之后是在node<k,v>中存储的,这两个数组的名字不一样但功能是一样的,它们都实现了Map.entry<k,v>接口
2、当HashMap中的元素个数size大于(capacity*loadFactor)时数组会进行2倍扩容
3、加载因子越接近于0则表示元素存储越稀疏,越接近于1则表示元素存储越密集。加载因子默认设置为0.75时是因为JDK开发人员经过大量的测试后相比于设置其他值时空间利用率、查找效率比较好的一个值的结果。
如果我们设置loadFactor的值为0.3<0.75时 我们在HashMap中存了很少的元素时就会扩容会造成空间的极度浪费。
如果我们设置loadFactor的值为0.95的话,我们的元素发生哈希碰撞的概率会很大,在HashMap中的一个Hash桶中(entry<k,v>)中存储的元素会过多从而导致查找性能的降低。
所以综合空间利用和查找效率上的最大化,我们一般使用官方推荐的默认加载因子为0.75.