特点:
1.无序,键值对,键不能重复,值可以重复,这里的无序指的也是插入的顺序和读取的顺序是不一样的,和set集合一样。
2. 键重复则覆盖,没有继承Collection接口,它单独继承Map接口,和list,set不一样,这两个继承collection接口
扩容:
初始容量16,负载因子0.75,扩容增量1倍
遍历:
先获取所有键的Set集合,再遍历(通过键获取值)取出保存所有Entry的Set,再遍历此Set即可。
map的实现类
HashMap
1. 线程不安全,最常用,速度快
2. 内部采用数组来存放数据
put的执行过程
流程图中绿色标出的部分为JDK8新增的处理逻辑,目的是在Table[i]中的Node节点数量大于8时,通过红黑树提升查找速度。
Table数组中的的Node
jdk1.8之前的链表结构示意图
jdk1.8 后的红黑树示意图
在这里,不得不说一下,什么是红黑树
特性:
1. 每个节点要么红要么黑
2. 根节点是黑色
3 .每个叶子节点都是黑色(叶子是NULL节点表示 或 NIL节点表示)。
4. 如果一个节点是红色的,那么它的子节点必须是黑色的子节点。(即不存在两个连续的红色节点)
5. 从任一节点到其每个叶子结点(NULL节点或 NIL节点)的所有简单路径都包含相同数目的黑色节点。
红黑树其实就是以第一个数据作为判断依据,后面进来的数据与其做比较,比