HashMap的数据结构:
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。首先,HashMap类的属性中定义了Entry类型的数组。Entry类实现java.ultil.Map.Entry接口,同时每一对key和value是作为Entry类的属性被包装在Entry的类中。
如图所示,HashMap的数据结构:
HashMap的部分源码如下:- /**
- * The table, resized as necessary. Length MUST Always be a power of two.
- */
-
- transient Entry[] table;
-
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- Entry<K,V> next;
- final int hash;
- ……
- }
复制代码 可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表,当新建一个HashMap,就会初始化一个数组,table数组元素的类型就是Entry类型的,每个Entry就是一个键值对,并且持有一个指向下一个Entry元素的引用。 |