散列表的本质还是个数组,如果一定要给个更确切的名字,那就是增强版数组。
现在我们不需要一定是个整型下标来定位到对应的value,
我们可以通过一个string的key,通过一个特定的hash函数,比如直接获取此key的hashcode,然后对hashcode进行数组的长度取模得到一个数组的下标,然后定位到数组下标的值,那么此时有可能发生hash冲突,比如两个不同的key,经过hash函数计算后,都是同个数组下标,那么有两种解决方法,一种是开放地址法,就是通过基于该数组下标,继续向后遍历第一个空的数组位置进行插入,另外一种就是链表法,我们通过在这个下标位置进行指向链表的下一个节点,来依次插入。
问题也来了,如果很多的元素都hash到同个下标,那么查找的时候将变成了依次遍历整个链表,查询速度又降下来了,那么此时我们可以转化为红黑数,来提升查询效率。
好了,这就是hashmap的基本原理。