有趣又有序的LinkedHashMap(一)

简介: 哈喽,大家好,我是指北君。PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!【文末有领取方式】

说到集合类,之前介绍的ArrayList类,HashMap可能是大家日常用的最多的类,但是对于另一个集合类 LinkedHashMap,可能大家用的不多,但是这种链式哈希集合,有些情况确实特别好用。

1.jpg


1、LinkedHashMap 定义


LinkedHashMap 是基于 HashMap 实现的一种集合,具有 HashMap 集合上面所说的所有特点,除了 HashMap 无序的特点,LinkedHashMap 是有序的,因为 LinkedHashMap 在 HashMap 的基础上单独维护了一个具有所有数据的双向链表,该链表保证了元素迭代的顺序。

所以我们可以直接这样说:LinkedHashMap = HashMap + LinkedList。LinkedHashMap 就是在 HashMap 的基础上多维护了一个双向链表,用来保证元素迭代顺序。

更形象化的图形展示可以直接移到文章末尾。

2.png


2、字段属性


①、Entry<K,V>

3.png


LinkedHashMap 的每个元素都是一个 Entry,我们看到对于 Entry 继承自 HashMap 的 Node 结构,相对于 Node 结构,LinkedHashMap 多了 before 和 after 结构。

下面是Map类集合基本元素的实现演变。

4.pngLinkedHashMap 中 Entry 相对于 HashMap 多出的 before 和 after 便是用来维护 LinkedHashMap  插入 Entry 的先后顺序的。


②、其它属性


5.png


注意:这里有五个属性别搞混淆的,对于 Node  next 属性,是用来维护整个集合中 Entry 的顺序。对于 Entry before,Entry after ,以及 Entry head,Entry tail,这四个属性都是用来维护保证集合顺序的链表,其中前两个before和after表示某个节点的上一个节点和下一个节点,这是一个双向链表。后两个属性 head 和 tail 分别表示这个链表的头节点和尾节点。


3、构造函数


①、无参构造

6.png


调用无参的 HashMap 构造函数,具有默认初始容量(16)和加载因子(0.75)。并且设定了 accessOrder = false,表示默认按照插入顺序进行遍历。


②、指定初始容量

7.png

③、指定初始容量和加载因子

8.png


4、添加元素


LinkedHashMap 中是没有 put 方法的,直接调用父类 HashMap 的 put 方法。关于 HashMap 的put 方法,可以参看我之前对于 HashMap 的介绍。

我将方法介绍复制到下面:

9.png


10.png

11.png

相关文章
|
3月前
|
安全
TreeMap - 红黑树
TreeMap - 红黑树
34 0
|
1月前
|
存储 Java
Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。
【10月更文挑战第13天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。通过解析内部机制和示例代码,帮助读者理解这两种集合的特点和应用场景,从而更好地选择合适的集合类型满足实际需求。
28 3
|
1月前
|
存储 Java 开发者
HashSet和TreeSet教你重新认识Java集合的无序与有序
【10月更文挑战第14天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了它们分别实现无序和有序存储的机制。通过理解HashSet基于哈希表的无序特性和TreeSet利用红黑树实现的有序性,帮助开发者更好地选择合适的集合类型以满足不同的应用场景。
17 2
|
5月前
|
存储 算法 安全
深入了解哈希映射(HashMap)
哈希映射是现代软件开发中不可或缺的一种数据结构,它通过独特的存储和检索机制,提供了高效的数据处理能力。正确理解和使用哈希映射,能够显著提高软件性能和开发效率。不论是在日常的软件开发还是在处理大规模数据集时,哈希映射都是一个极佳的选择。
107 1
|
5月前
|
存储 Java
打破常规!HashSet和TreeSet教你重新认识Java集合的无序与有序
【6月更文挑战第17天】Java集合框架中的Set接口,HashSet无序而TreeSet有序。HashSet基于哈希表,元素插入顺序不可预测,适合快速去重。TreeSet利用红黑树保证有序性,支持自然排序或自定义排序。若需同时无序和有序,可先用HashSet去重,再将元素加入TreeSet,但会牺牲性能。选择时依据对顺序和性能的需求。
158 2
TreeMap的排序
TreeMap的排序
77 0
Map的遍历和Map的有序和无序
Map的遍历和Map的有序和无序
85 0
|
消息中间件 前端开发 JavaScript
LinkedHashSet 有序且不能重复的集合
哈喽,大家好,我是指北君。 同 HashSet 与 HashMap 的关系一样,本篇文章所介绍的 LinkedHashSet 和 LinkedHashMap 也是一致的。在 JDK 集合框架中,类似 Set 集合通常都是由对应的 Map 类集合来实现的(TreeSet 和 TreeMap 同理),这里很重要的一个理论就是:Set 类集合是不允许重复的,而 Map 类集合的 key 也是不允许重复的,所以通常很容易就用 Map 类集合实现了 Set 类集合。
LinkedHashSet 有序且不能重复的集合
|
消息中间件 前端开发 JavaScript
有趣又有序的LinkedHashMap(二)
哈喽,大家好,我是指北君。 PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!【文末有领取方式】
有趣又有序的LinkedHashMap(二)