HashMap Key为null的时候,是如何操作的? 为何数组里面要用链表这种数据结构? - Gukie/interview GitHub Wiki

key为null的时候:

  1. Key的hashcode为0,
  2. 会被放在数组下表为0的地方,
  3. 对应的链表,也是第一个
static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

HashMap底层是一个数组

transient Node<K,V>[] table;

put的时候,是会去调用 LinkedHashMap 的方法 去添加数据的。 之所以每一个数组的table是一个链表,是因为insert的时候比较方便,获取的时候的时间复杂度也只是 O(n)


hashMap的最大size是: 2的30次方

static final int MAXIMUM_CAPACITY = 1 << 30;
⚠️ **GitHub.com Fallback** ⚠️