建议你查看一下散列表一些规则,负载因子表示散表的装满程度,如果是增大了负载因子的话,就代表这个散列表装的越满,这个越满代表了什么,代表了hash表的空间越少,所以往里面put或者get的时候经常会出现散列值的冲突问题,举个例子,在放数据的时候,如果求到了一个散列值了,准备放的时候,发现hash表在那个位置有数据了,那就得往后查找,如果找个空间很小,很可能之前就已经放过值了。。又得往后,是不是浪费时间,如果第一次放的时候就有足够的空位置呢?也就是说如果散列表够大,求出来的散列值不存在冲突,是不是可以直接放进去了?查找同理
我新建一个HashMap,初始容量为16。
我存入一个对象,则会先取其hashcode,
然后在把hashcode经过某种indexFor运算,得出0-15之间的一个数字。
例如我
存入Object1 存到下标0;
存入Object2 存到下标7;
存入Object3 存到下标4;
存入Object4 恰好也是7,怎么办呢,发生了碰撞?
Hashmap的做法是把Object2和4组成一个链表,然后在放在下标7的位置。
由此我们知道负载因子越大,发生碰撞的可能性越大。
我们知道hash操作和indexFor运算的速度都很快,
可是对于链表的查询(只能一个一个的比较)比Hash查询慢多了。
所以负载因子越大,则查询速度越慢。负载因子越小,则空间浪费越大。