Map (使用key值进行搜索) : 使用键值对 key value 进行<br>存储 key 为无序,不可重复的 , value 为无序,可重复的 ,<br>每个键最多只能映射一个值<br>
底层数据结构
HashMap : JDK 1.8 之前HashMap 是由 数组+链表组成的,数组是HashMap 的主体 ,<br>链表则是主要为了解决哈希冲突而存在的 ("<font color="#f68b1f">拉链法</font>" 解决冲突). jdk1.8 以后解决哈希冲突时<br>变为了,当链表长度大于阀值(默认为8) (将链表转换成为红黑树,但是会判断当前数组的长度小于<br>64,会优先进行数组扩容,) <br>"<font color="#f15a23">拉链法" : 创建一个链表数组,数组中每一个就是一个链表, 若遇到哈希冲突 , 则将冲突的值加入链表中<br></font><font color="#f68b1f">"红黑树" : 是一个自平衡(不是绝对平衡) 的 二叉查找数 , 树上的每个节点都遵循 <br>1. 每个节点都有红色或者黑色 <br>2 .树的根始终是黑色的<br>3.没有两个相邻的红色节点 ( 红色节点不能有红色父节点或红色子节点, 并没有说不能出现连续的黑色节点)<br>4.从节点(包括根)到其任何后代NULL节点(叶子节点下方挂的两个空节点,并且认为他们是黑色的)的每条路径<br>都具有相同数量的黑色节点</font><br>
LinkedHashMap : 继承自 HashMap , 所以它的底层仍然是基于拉链式散列结构即由<br>数组和链表或红黑树组成. 另外 LinkedHashMap 在上面结构的基础上,增加了一条双向链表<br>使得上面的结构可以保持键值对的插入顺序.
HashTable : 数组 + 链表组成 , 数组是HashMap 的主体 ,链表则是主要为了解决哈希冲突
TreeMap : 红黑树