LinkedHashMap介绍(特点,优势,和其他比较)

【Java集合框架】21 ——LinkedHashMap 类 LinkedHashMap 阅读详情

LinkedHashMap的特点:
1.LinkedHashMap继承了HashMap ,实现了Clonable ,serialiable(可序列化) , map接口;

 public class LinkedHashMap<K,V> 
    extends HashMap<K,V>
    implements Map<K,V>
{
}

2.提供了AccessOrder参数,用来指定LinkedHashMap的排序方式,accessOrder =false -> 插入顺序进行排序 , accessOrder = true -> 访问顺序进行排序。

LinkedHashMap的优势:
相比于HashMap:迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。而LinkedHashMap,它虽然增加了时间和空间上的开销,通过一个双向链表,LinkedHashMap保证了元素迭代的顺序。该迭代顺序有两种,可以是插入顺序或者是访问顺序。LinkedHashMap继承了HashMap类,有着HashMap的所有功能,还提供了记住元素添加顺序的方法。

LinkedHashMap和HashMap的异同点:

  • 相同点

1.linkedHashMap虽然继承HashMap, 但实现了双线链表 ,有固定的顺序,与插入entry的顺序一样; 而HashMap存储的方式是无序的。
2.LinkedHashMap包含removeEldestEntry()方法,而HashMap则没有;

 protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {  
        return false;  
 }
  • 相同点

key——value键值对:
1.Key和Value都允许空
2.Key重复会覆盖、Value允许重复

安全性:
非线程安全

继承关系:
都实现了Clonable ,serialiable(可序列化) , map接口;

LinkedHashMap底层数据结构:
数组加链表
LinkedHashMap可以认为是HashMap+LinkedList,它可以使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序。

LinkedHashMap成员变量:
// LinkedHashMap维护了一个双向链表,header是链表头,不存储数据。
private transient Entry<K, V> header;
// accessOrder(有序性的标志),accessOrder=true(访问有序),默认为false(插入有序)
private final boolean accessOrder;

Entry内部类:

//before:指向前一个entry元素。after:指向后一个entry元素

 Entry<K,V> before, after;

//使用的是父类HashMap的Entry构造

next是用于维护HashMap指定table位置上连接的Entry的顺序的,before、After是用于维护Entry插入的先后顺序的。

Entry(int hash, K key, V value, HashMap.Entry<K,V> next) { 
	super(hash, key, value, next); 
}

LinkedHashMap并没有重写父类的put()方法,说明调用put方法时实际上调用的是父类的put方法。按照顺序将entry插入到头结点为header的双向链表中;

linkedHashMap的get()方法:判断accessOlder的值 是需要按访问顺序还是遍历顺序来进行操作。

public V get(Object key) {
     //1.调用HashMap的getEntry方法得到e  
     Entry<K, V> e = (Entry<K, V>) getEntry(key); 
     if (e == null){
       	return null; 
     }
     //2.LinkedHashMap加入的操作 
     e.recordAccess(this);
     return e.value; 
}
void recordAccess(HashMap<K,V> m) { 
     LinkedHashMap<K,V> lm = (LinkedHashMap<K,V>)m;
     if (lm.accessOrder) {
        lm.modCount++; 
     remove(); 
     //因为是双向循环链表,所以在头节点之前插入的节点也就是链表的尾节点 			                     	
     addBefore(lm.header); 
     }
}
private void addBefore(Entry<K,V> existingEntry) { 
     after = existingEntry; 
     before = existingEntry.before; 
     before.after = this; 
     after.before = this; 
}

LinkedHashMap的remove()方法,是将双线链表的某一个节点移除,而不移除数组加链表上的节点。

   private void remove() {       
        //this.before.after = this.after;       
        //this.after.before = this.before; 这样看可能会更好理解,this指的就是要删除的那个元素。 
        before.after = after; 
        after.before = before; 
    }

LinkedHashMap的containsValue方法:首先处理value为null的情况, 其次它不像HashMap一样遍历整个数组, 而是通过遍历双线链表header来查找value;

LinkedHashMap可以保存元素的插入顺序,顺序有两种方式一种是按照插入顺序排序,一种按照访问做排序。默认以插入顺序排序,性能比HashMap略低,线程也是不安全的。

一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果要按顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵 阅读详情

相关推荐

安装破解IAR EWARM 8.2,提供注册机

IAR Embedded Workbench for ARM(IAR for ARM)是一款微处理器的集成开发环境软件,该集成开发环境中包含了IAR的C/C++编译器、 汇编工具、链接器、库管理器、文本编辑器、工程管理器和C-SPY调试器,支持ARM,AVR,MSP430等芯片。   一、安装 双击运行安装程序,点击Install IAR Embedded Workbench for ARM...

睿思派克 4万+

ArrayList、HashSet、LinkedHashSet、Map、HashMap、 LinkedHashMap、Hashtable的特点总结

HashSet集合的特点: 不能存储重复元素、无序、不能使用普通的for循环遍历、查询速度快(底层是哈希表结构)。 LinkedHashSet集合的特点: 不能存储重复元素、有序。 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)。 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同。 3.Map集合中的元素,key是不允许重复的,value是可以重复的。 4.Map集合中的元素,key和value是一一对应的(即元素以键值对的形式进行

m0_53328194的博客 1110

# 解决 win11 连接共享打印机,报错 0x00000709 问题

# 解决 win11 连接共享打印机,报错 0x00000709 问题

段子手168的博客 9万+

Java基础 LinkedHashMap

LinkedHashMap是HashMap和双向链表的合二为一,即一个将所有Entry节点链入一个双向链表的HashMap(LinkedHashMap = HashMap + 双向链表)LinkedHashMap和HashMap是Java Collection Framework 的重要成员,也是Map族(如下图所示)LinkedHashMap是HashMap的子类(拥有HashMap的所有特性)

深入Java世界:探索编程之美与技术深度 1718

无人机VS地面机器人:用AirSim和Gazebo玩转ROS2仿真的5个实战场景对比

本文深度对比了ROS2生态中两大仿真工具AirSim和Gazebo在无人机与地面机器人应用中的表现。通过电力巡检、仓库调度、SLAM建图等5个实战场景,分析了两者在视觉保真度、物理精度、开发效率等方面的差异,并提供了跨平台协作的实用技巧,帮助开发者根据项目需求选择合适的仿真工具。

flink9streamer的博客 900

避坑指南:Winbond W25Q256JV QSPI Flash状态寄存器那些坑(含QE位不可改的解决方案)

本文深度解析Winbond W25Q256JV QSPI Flash状态寄存器的常见问题与解决方案,重点解决QE位不可修改、写保护区域异常等典型问题。通过实战代码示例和寄存器配置技巧,帮助开发者高效完成Flash读写测试与性能优化,避免常见设计陷阱。

ol7890123的博客 309

JAVA - LinkedHashMap特点及小结

LinkedHashMap 继承自HashMap的,多线程不安全的、用于存储K、V键值对的,有序集合类。 在HashMap基础上,对存储的元素节点添加了前后指针、额外维护了一个双向链表维持顺序。由于增加了前后指针,当进行Put、Get、Replace等操作时,会有维护双向链表的额外开销。 使用迭代器遍历时比HM要快。使用场景是:当设定为按访问顺序存储时,适合做LRU缓存。 特点 LinkedHM的存储单元类型 使用Entry类作为存储类,继承自HashMap的Node类. Entry类添加了before

qq_29047189的博客 1140

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 732

LinkedHashMap

前面对 HashMap 的源码做了分析,我们知道 HashMap 内部的数据结构是数组+单链表/红黑树实现的,这种数据结构是不能保证数据插入的有序性的,因为会对传入的 key 做 hash 运算,通过链表指向的方法去存储数据,这样就导致了遍历数据的时候无法根据我们存入的顺序来读取。 先看下继承结构: 可以看到LinkedHashMap继承于HashMap,他继承了HashMap的方法和特性,比如内部的默认初始容量、默认负载因子、扩容机制等。但是LinkedHashMap在此基础上又进行了扩展,主要提供了元

.天天向上. 1543

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4560

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

2022Java学习笔记六十九(Map集合系列、LinkedHashMap集合特点、TreeMap集合实现)

2022Java学习笔记六十九(Map集合系列、LinkedHashMap集合特点) 一、LinkedHashMap集合特点 由键决定:有序、不重复、无索引 这里的有序指的是保证存储和取出的元素顺序一致 原理:底层数据结构依旧是哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序 二、TreeMap集合实现 由键决定特性:不重复、无索引、可排序 可排序:按照键数据的大小默认升序(小到大)排序,只能对键排序 注意:TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定的规则进

我要记录学习博客 667

使用STM32H7点亮RGB屏幕

希望本文能对你有所帮助!RGB屏幕是一种具有红、绿、蓝三种颜色通道的显示设备,通过控制每个通道的亮度,可以显示出丰富多彩的图像和动画。要使用STM32H7控制RGB屏幕,我们需要连接适当的引脚,并编写适当的代码来控制每个颜色通道的亮度。在主循环中,我们先点亮红色通道,然后延迟一段时间,接着点亮绿色通道,再延迟一段时间,最后点亮蓝色通道,并再次延迟。需要注意的是,示例代码中的延迟循环使用了一个简单的计数器实现,但实际应用中可能需要更精确的延迟方式,例如使用定时器中断或操作系统提供的延迟函数。

QoyOle的博客 925

java集合

java集合笔记

dindixi的博客 1287

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java中HashMap、Hashtable、LinkedHashMap、TreeMap特点和区别

Java中HashMap、Hashtable、LinkedHashMap、TreeMap特点和区别

weixin_42263032的博客 760

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HashMap 和 LinkedHashMap 的使用区别——找出你的最佳选择!

HashMap是一种基于哈希表的实现,它允许将键和值存储为一对一的映射。HashMap快速访问:由于使用哈希算法,HashMap在平均情况下具有常数时间复杂度的查找、插入和删除操作(O(1))。无序性HashMap不保证顺序。即使你以某种顺序插入元素,在迭代时也可能会得到不同的顺序。允许 null 值HashMap允许一个空键和多个空值。是HashMap的一个子类,结合了哈希表的高效性和链表的顺序特性。有序性维护了一个双向链表,按照插入的顺序排列元素。当你迭代。

龚小帅的博客 1483

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 中的 LinkedHashMap

应用:由于 LinkedHashMap 使用双向链接列表来维护插入顺序,我们可以通过重写removeEldestEntry()方法来实现 LRU 缓存功能,以实施在将新映射添加到映射时自动删除过时映射的策略。HashMap 具有快速插入、搜索和删除的优势,但它从不维护插入的轨迹和顺序,而 LinkedHashMap 则提供了可以按插入顺序访问元素的功能。由于 LinkedHashMap 中的元素是使用键进行索引的,因此只需重新插入我们希望更改的键的更新值即可更改键的值。因此,该参数是数据的键。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1032

LinkedHashMap和HashMap的比较使用

  网上搜的,直接上例子: import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class TestLinkedHashMap { public static void main(String ...

hunterpanda的博客 119

Java集合详解:LinkedHashMap

就是带链表的HashMap;每一种数据结构都有其优势,同时也有其劣势,这使得不同的数据结构适用于不同的应用场景,但在实际应用中,有很多复杂和动态的应用场景通常需要采用不同的数据结构来处理,这个时候就需要组合不同的数据结构来满足特定应用场景的需求,就是一种组合数据结构的实现,它组合了链表和哈希表,不仅仅具有哈希表快速的随机存取能力,同时又保持了元素的插入或者访问顺序,可以通过链表对元素按照其插入或访问顺序进行快速的遍历。组合了双向链表和哈希表,关于哈希表和HashMap可看这篇。

qj19842011的专栏 1092

JAVA 中的LinkedHashMap 使用场景

package audaque. com. pbting. collection. test; import java. util. ArrayList; import java. util. Iterator; import java. util. LinkedHashMap; import java. util. List; import java. util. Map. E

pbting的博客 6042

【Java集合源码剖析】LinkedHashmap源码剖析

前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时间研究了下,分享出此文,希望大家相互学习。LinkedHashMap的源码理解起来也不难(当然,要建立在你对HashMap源码有较好理解的基础上)。 LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序

兰亭风雨的专栏 3万+

对比分析HashMap、LinkedHashMap、TreeMap

前面花了4章对HashMap、LinkedHashMap以及TreeMap的原理实现进行了讲解,本章对它们进行简单的对比分析,从线程安全、初始容量、存储结构、顺序规则、存储特点、插入效率、遍历效率、使用场景及举例。另外:前面提到的插入效率和遍历效率的高、较高都是在大数量的情况下,当数据量少的情况下基本没有区别

梁初夏的专栏 2310

揭秘 Java LinkedHashMap:从源码深度剖析使用原理

是 Java 集合框架中的一个类,它继承自HashMap,并实现了Map接口。与HashMap不同的是,内部维护了一个双向链表,用于记录元素的插入顺序或者访问顺序。这意味着当我们遍历时,元素会按照插入顺序或者访问顺序依次出现。// LinkedHashMap 类继承自 HashMap 类,并实现了 Map 接口// 序列号,用于序列化和反序列化// 双向链表的头节点// 双向链表的尾节点// 访问顺序标志,true 表示按访问顺序排序,false 表示按插入顺序排序。

Android开发领域创作者 881

Java Map 你真的用对了吗?HashMap、LinkedHashMap、TreeMap 全解析

写 Java 的人每天都在用 Map,但你真的用对了吗?虽然都叫 Map,但底层结构、时间复杂度、使用场景完全不同。如果你还分不清什么时候用哪一个,那这篇文章就是为你写的。

weixin_51371642的博客 948
上一篇: 简单麻将功能实现
下一篇: Java中数组的几种拷贝方式
Java-fly
博客等级 码龄9年 13粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值