HashMap实现原理
HashMap
是一个用于存储键值对Key-Value
的集合,每个键值对也叫作Entry
,是一个的数组和链表的结构,也是一种散列表结构。HashMap
中维护了一个Node<K, V>[] table
的数组。将键值Key
通过散列函数hash()
得到一个散列值index
,然后通过该散列值index
将值Value
放到数组table
中。
HashMap
默认长度DEFAULT_INITIAL_CAPACITY
为1 << 4
也就是16,其长度必须为2的幂。其负载因子DEFAULT_LOAD_FACTOR
为0.75。当存储数量达到一定数量threshold
(threshold = DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR
)的时候,那么将HashMap
进行扩容,扩容之后再重新计算散列值index
将值放入。
下面我们就HashMap
的几个基本方法讲解一下其具体的实现原理。
hash(Object key)
int h;
return (key == null ) ? 0 : (h = key.hashCode)) ^ (h >>> 16);
hash
函数通过键key
计算出需要插入的索引index
。该函数中通过key
的hashCode
和它的右移16位做异或操作。