HashMap内部实现原理:
1)当调用put方法往HashMap中存键值对时,会把key的hashCode值交给Hash
算法进行计算,算出来一个地址值,该地址值决定着该键值对存在数组中的那个位置.
2)找到该存储地址位置时会在调用equals方法来比较是否存在相同的key,如果不存在则把该键值对存在该位置,如果存在则替换其value值.
3)如果在调用put方法时传入key不相同,但是key的hashCode值交给Hash算法进行计算时得到了相同的地址值,那么就会产生链表.会在同一个地址上存入两个key不相同的键值对,先存入的键值对被放到链表的尾部,后存入放到链表首部,当链表的长度达到8时,保存第9个链表元素时会将链表转成红黑树。
4)产生链表会影响查询效率,所以被存入的键值对对象都会重写equals和hashcode方法,但链表不能完全避免,原因是可能存在巧合key不相同但HashCode值相同.
5)当调用get方法时传入key,把key的hashCode值交给Hash算法进行计算,算出来一个地址值,通过该地址找到元素后在调用equals方法来比较key是否存在,若存在则返回其value值.
hash默认的空间16,加载因子是0.75