Java速记手册

Java集合03——你不得不了解的Map

2020-03-06  本文已影响0人  Java面典

Map 在面试中永远是一个绕不开的点,本文将详细讲解Map的相关内容。关注公众号「Java面典」了解更多 Java 知识点。

Map

HashMap

特点

实现

HashMap.png

可以看出 HashMap 其实是一个数组 + 单向链表组成。

容量

Java8实现

Java8HashMap.png

从 Java8 开始,Java 对 HashMap 的实现有了一定的改变,开始引入红黑树,所以其结构变成了 数组 + 链表 + 红黑树组成。

原因:当发生 hash 冲突时,在链表中查询 Node 的时间复杂度为 O(n),为了降低时间复杂度,引入红黑树,时间复杂度变为 O(logN)。

容量:除了Java7中的容量相关参数外,Java8为了引入红黑树,还引入了另外几个容量相关的变量。

ConcurrentHashMap

特点

网上关于key 和 value 不允许为 null 的解释是这样描述的:如果map.get(key)return null,则无法检测到该键是否显式映射到 null 该键。在非并行映射中,您可以通过进行检查 map.contains(key),但在并行映射中,两次调用之间的映射可能已更改

实现

ConcurrentHashMap.png

Java8实现

Java8 ConcurrentHashMap.png

和 HashMap 一样, ConcurrentHashMap 在 Java8 中也引入了红黑树的机制。在这里就不再赘述了。

LinkedHashMap

LinkedHashMap.png

LinkedHashMap 是 HashMap 的一个子类,它记录了元素插入的顺序,能够保证在使用迭代器遍历的时候,先插入的元素先获取。也可在构造时带参数,按照访问次序排序。

WeakHashMap

特点

弱键原理

主要变量

TreeMap

Hashtable

Java集合系列推荐

Java集合02——三分钟了解你必须掌握的两个Set
Java集合01——List 的几个实现类,了解一下?

上一篇 下一篇

猜你喜欢

热点阅读