hashMap的理解
一、HashMap简介
- HashMap是基于哈希表实现的,每一个元素是一个key-value对,无序,不可重复。
- HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的
concurrentHashMap
。 - HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。
- hashmap集合的默认初始化容量为16(2<<3),默认加载因子为0.75,也就是说这个默认加载因子是当hashMap集合底层数组的容量达到75%时,数组就开始扩容。hashmap集合初始化容量是2的陪数,为了达到散列均匀,提高hashmap集合的存取效率。
- 无论我们指定的容量为多少,构造方法都会将实际容量设为不小于指定容量的2的次方的一个数,且最大值不能超过2的30次方
- HashMap中key和value都允许为null。key为null的键值对永远都放在以table[0]为头结点的链表中。
- JDK1.8之后当链表的长度达到 “8” 时,内部会调用 “treeifyBin” 方法,判断数组长度是否达到 “64” 达到就会自动变成红黑树的结构,达不到会调用扩容机制,当红黑树节点的个数达到 “6” 之后,又会变成链表结构。
put原理
第一步首先将k,v封装到Node对象当中&#