HashMap底层原理
每个对象有一个特殊的HashCode,它的范围是int的范围,对于HashMap,不同的算法有不同的存储方式。
1.如果不同的HashCode算出的值相同,则放到同一个链表中,按 顺序排放,例如求余数,肯定有余数相同的HashCode,余数相同的就放在同一个链表里面。高效的算法保证程序的高效性
2.如果极端化,用两种最愚蠢的算法,第一种,将数组的范围定义为和int一样,那么每个HashCode就对应一个数组元素,那么就不存在链表,就是一个数组;第二种,如果将运算的结果设定为同一个值,比如乘以0,那么就没有数组,只是一个链表,高效的算法就要找到分配最均匀的方式,远离这两个极端。
3.get方法的原理跟存储原理类似,根据HashCode确定对象所在的链表,然后调用equals方法一个个进行对比,如果有一个为true就返回这个里面的value。
4.内容相同的对象必须有相等的HashCode
PS:JDK8之后,当链表长度大于8时,就转换为红黑树,又大大提高了查找效率。