断断续续写了半个月,今天终于把TreeMap
容器中的红黑树
搞定了,现在来水一篇又快又短
的Java Map容器
总结博客 😂😂。
注明:本篇博客不会涉及容器的源码什么的,主要是总结各个map
容器的底层实现特点、主要运用场景。如果你需要详细了解更多关于Java
中的map
容器实现的细节,文末会提供我前面写的源码分析的博客链接,欢迎阅读。
Java
中的Map
容器概述 Map
是一种存储key-value
(键值对
)的容器,在Java中,常见的Map
接口的实现类有五种,分别是HashMap
、Hashtable
、ConcurrentHashMap
、LinkedHashMap
、TreeMap
。五种容器的关系如下图:
顺带一提,貌似有不少人觉得map
就是hashmap
、hashmap
就是map
,把hash
与map
两个概念混为一谈。然而map
是用于存储key-value
的虚拟容器,按照key的hash值将节点散列到一个table数组
(也称hash表
)的table[i]
(也称hash桶
)中。等你看完TreeMap
的底层数据结构就会发现,不通过key.hash值
,也可以实现map容器
。
HashMap
容器HashMap
概述 Java中的HashMap
底层使用一个table数组
存放节点,使用链表(JDK 1.8
新增红黑树
)解决hash冲突
(多个元素的hash值
散列到同一个table[i]
中)的问题。
HashMap
数据结构示意图HashMap
特点因篇幅问题不能全部显示,请点此查看更多更全内容