HashMap在我们的日常开发以及面试中经常出现,它在实际应用中真的很频繁,一个老练的程序员对Hashmap的结构都是非常的熟悉。今天就来讲一下HashMap的底层原理。
HashMap底层就是通过数组+链表实现的,先通过对key进行hashing算法,得到Entry[]中该key被分配到的位置,然后用equals方法进行比较,如果key的equals方法判断相等,则覆盖,如果不等则在链表中添加。hashmap中根据hashcode来定位是利用了数组查找快的特性,数组根据下标索引的时间复杂度为O(1)。
哈希冲突:又叫哈希碰撞,指的是当key的hashCode值一样时,处于数组中的相同位置,这个时候就变成了在链表中添加元素,由于链表中查找的时间复杂度是O(n),所以要尽量避免hash冲突,默认有一个阈值是0.75,称为负载因子,当数组的利用率超过了负载因子时,就会进行扩容为两倍,主要是为了避免hash冲突,提高查询效率。
hashMap中还有许多的问题,例如多线程扩容的问题,后面会继续探讨这些问题。