1. 继承关系
- Map是图,HashMap是其实现子类
- Collection是集合,Set是其实现接口,也是一种集合,AbstractSet是Set接口的抽象实现类
- EntrySet作为HashMap的内部类,又作为AbstractSet的直接实现类,架通了一条集合与图之间的桥梁;
2. 数据到底存在哪里?
-
当我们创建HashMap实例,并往里面put元素的时候,数据的存储如下:
-
HashMap类确实维护了一个字段table,从图中看出其类型是HashMap$Node[ ]
transient Node<K,V>[] table;
- Node是HashMap内部的一个节点类,用于存放Map的<K, V>数据:
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
- table[ ]是一个数组,此处可称为表头,HashMap的hash一词就体现在这个表头的存储方式上:
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true