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 可以实现,它还可以按读取顺序来排列.

光模块基础知识【快速入门】02 光模块是用于交换机与设备之间传输的载体,是光纤通信系统中的核心器件。主要作用是发射端将设备的电信号转换成光信号。 光纤通道光模块和以太网光模块 光纤通道光模块 光纤通道(FC, Fiber Channel)是一种高速网络数据传输协议。光纤通道协议可以有序无损地传输原始数据,它主要用于在数据中心、电脑服务器、交换机与存储网络中进行数据传输。 FC光模块遵循FC协议,充当着光纤通道系统之间的接口,也是光纤存储网络设备间的接口。它们主要用于数据中心的光纤通道存储网络链接中。 FC光模块具有小型化和低. 阅读详情

相关推荐

CMake接口库实战:如何用add_library的INTERFACE选项管理跨项目依赖

本文深入探讨了CMake中add_library的INTERFACE选项在管理跨项目依赖时的实战应用。通过创建不包含源代码的接口库,开发者可以集中管理头文件路径、编译定义、链接库等公共配置,并将其声明式地传递给依赖目标。文章以构建模块化跨平台网络应用为例,详细展示了如何利用接口库实现配置的集中化、依赖关系的显式化,从而提升大型项目的可维护性和可移植性。

water的专栏 1040

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

解密携程风控:user-dun算法中的自定义base64与多模式加密机制剖析

本文深入剖析了携程旅行APP风控核心组件libduncode.so中的user-dun算法。文章重点解密了其采用的自定义Base64编码机制与多模式加密选择逻辑,并详细阐述了如何通过动态分析与静态还原,理解算法与设备指纹的深度绑定关系,为逆向分析类似混淆加固的风控算法提供了系统的方法论。

weixin_29323049的博客 340

Java基础 LinkedHashMap

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

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

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

数据服务:数据服务框架Magic-API 介绍及实践

接口快速开发框架 基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发 。在线页面快速开发平台 基于 vue 的在线页面快速开发平台,主要把所有的 vue 代码都改为在线配置,最终获得一个 json 格式的页面新一代爬虫平台 基于Java实现的新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。今天给大家安利一

GIS摆渡人 2063

JAVA - LinkedHashMap特点及小结

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

qq_29047189的博客 1140

SAP Fiori Elements 扩展实战:UI 层扩展、OData 服务扩展、CDS 视图增强及全流程案例

UI 层扩展主要关注在不修改标准生成界面的基础上,自定义用户界面元素和交互逻辑。典型需求包括:在现有 Fiori Elements 界面上添加新的字段(如表格列或表单项)、增加自定义按钮并绑定操作、以及通过控制器扩展加入事件处理等。无论在 RAP 还是传统 BOPF 架构下,前端 UI 扩展通常采用 SAPUI5 提供的**扩展点(Extension Points)和控制器扩展(Controller Extension)**机制来安全地插入自定义代码。下面分别说明两种后端架构下 UI 扩展的实现方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 905

LinkedHashMap

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

.天天向上. 1543

NPC 三电平逆变器中点电位平衡算法详解

最常用:零序电压注入(简单、计算量小)最可靠:虚拟空间矢量调制(VSVPWM)及其改进形式(全范围平衡)趋势:结合模型预测控制(MPC)或智能算法(模糊、神经网络)进一步提升动态性能和鲁棒性。NPC 三电平逆变器中点电位平衡算法的 C# 实现示例(零序电压注入法 + 闭环补偿)在 NPC(Neutral Point Clamped)三电平逆变器中,中点电位平衡最常用且易于软件实现的方案是零序电压注入法。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 325

嵌入式面经(2)——央企篇

前文得知我只投央企,不投国企,有面试的央企大致有三类:感兴趣的同学可以和我私聊军工央企相关(航空航天,兵器兵工)制造央企相关(三桶油,装备制造)金融运维相关(信通集团,国有银行)接下来我将对我有的面试中询问的面经进行总结。

coldmood77的博客 473

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

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

我要记录学习博客 667

微信小程序 - request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task请求报错

微信小程序请求接口,报request:fail errcode:10011是什么原因,uniapp微信小程序request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task,微信小程序wx.request常规访问接口,有个别用户的接口请求频繁报错,UniApp 微信小程序uni.request请求接口报错:request:fail errcode:10011 的原因分析与解决方案,苹果ios,安卓

🏆 前端领域优质创作者 4567

java集合

java集合笔记

dindixi的博客 1287

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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、付费专栏及课程。

余额充值