Bootstrap

HashMap如何做到通过EntrySet来查询?EntrySet什么时候放入数据了?

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
;