HashMap
特点
(1)HashMap是线程不安全的,意味着多线程下不能使用该方法,可能会导致意想不到的结果。如果我们细细的查看源码,就会发现HashMap方法没有synchronized这样的加锁操作。
(2)初始化容量:HashMap的默认容量是16.把1像左移动4个字节,变成了10000,是2的4次方也就是16。put后才开辟空间。
(3)默认加载因子:0.75f。
(4)底层实现:数组、链表、红黑树。
Java中的哈希表采用链地址法,当桶中的存储元素(链表)大于8的时候,进行一次判断。当数组的长度大于64的时候,自动转换成红黑树。转化成红黑树的两个必要条件:桶节点的数量大于8、整个数组的长度大于64。
(5)如何扩容:每一次扩容大小是当前容量的2倍。当map键值对数大于等于加载因子*数组长度时,可能发生扩容;或者当某个桶的链表长度大于8,但是数组长度小于64的时候。
(6)允许键值对中键的值为null。