HashMap Key为null的时候,是如何操作的? 为何数组里面要用链表这种数据结构? - Gukie/interview GitHub Wiki
key为null的时候:
- Key的hashcode为0,
- 会被放在数组下表为0的地方,
- 对应的链表,也是第一个
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;