hashmap (jdk 1.7)使用 “数组-链表” 方式进行存储,图形化表示如下:

即,前面是一个数组,后面跟一个链表,那么数据结构这个对应到HashMap的代码里面是什么样子的呢?
在HashMap中定义了一个类型为Entry<K,V>的数组table,上图就是显示了这个table。
/**
* The table, resized as necessary. Length MUST Always be a power of two.
*/
transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;
类型Entry<K,V>的定义如下:
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
int hash;
// 省略构造/get/set等函数
}
由Entry<K,V>的定义可知,上图每个节点中其实存了4个变量:
key表示键,即存入map的键值
value表示值,即存入map的值
next表示下一个Entry节点
hash表示key的哈希值。
那么上图准确表示应该是:

原文:https://www.cnblogs.com/lixiaolun/p/8781176.html