【集合系列】LinkedHashMap 集合

LinkedHashMap集合

    • 1. 概述
    • 2. 方法
    • 3. 遍历方式
    • 4. 代码示例
    • 5. 注意事项

其他集合类

祖父类 Map

父类 HashMap

集合类的遍历方式

具体信息请查看 API 帮助文档

1. 概述

LinkedHashMap 是 Java 中的一种特殊类型的 HashMap,它继承自 HashMap 类,并实现了 Map 接口。它是一个有序的集合,它保留了元素插入的顺序,并且允许使用它们的插入顺序进行迭代。

与普通的 HashMap 不同,LinkedHashMap 使用了一个双向链表来维护元素的插入顺序。这个链表将所有的条目按照插入的顺序连接在一起。这样一来,通过迭代链表,我们可以遍历 LinkedHashMap 这个有序集合。

LinkedHashMap集合:

  1. 由键决定:有序、不重复、无索引

  2. 有序:保证存储和取出的顺序一样

  3. 原理:底层数据结构依然是哈希表,只不过每个键值对元素又额外多了一个双链表的机制记录存储的顺序。

LinkedHashMap 的特点

  • 有序性:LinkedHashMap 中的元素按照它们被插入的顺序进行排序。这样,当遍历 LinkedHashMap 时,得到的元素的顺序将与插入顺序相同。

  • 快速访问:LinkedHashMap 的 get 操作具有常量时间复杂度 O(1)。

  • 更多的内存占用:相比于普通的 HashMap,LinkedHashMap 需要维护额外的双向链表结构,因此它在内存占用方面要稍微多一些。

2. 方法

LinkedHashMap集合是HashMap集合的子类,是Map集合的孙子类,因此HashMap集合和Map集合的方法LinkedHashMap集合都能使用。

Map集合

HashMap集合

方法名说明
V put(K key,V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数

3. 遍历方式

与共有的 集合遍历方式 一样

4. 代码示例

  • 代码示例
package text.text02;import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;/*
LinkedHashMap集合:
1.由键决定:有序、不重复、无索引
2.有序:保证存储和取出的顺序一样
3.原理:底层数据结构依然是哈希表,只不过每个键值对元素又额外多了一个双链表的机制记录存储的顺序。*/
public class text51 {public static void main(String[] args) {//创建集合LinkedHashMap<String, String> lhm = new LinkedHashMap<>();//添加元素lhm.put("刘备", "01孙尚香");lhm.put("李白", "02王昭君");lhm.put("孙策", "03小乔");lhm.put("周瑜", "04小乔");lhm.put("孙悟空", "05露娜");lhm.put("亚瑟", "06安琪拉");//遍历集合//1.利用键找值遍历System.out.println("===================1.利用键找值遍历===================");Set<String> set = lhm.keySet();for (String key : set) {String value = lhm.get(key);System.out.println(key + " = " + value);}//2.利用键值对遍历System.out.println("===================2.利用键值对遍历===================");Set<Map.Entry<String, String>> entries = lhm.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + " = " + value);}//3.结合Lambda表达式遍历System.out.println("===================3.结合Lambda表达式遍历===================");lhm.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String key, String value) {System.out.println(key + " = " + value);}});}
}
  • 输出结果
    • 1.利用键找值遍历
      在这里插入图片描述

    • 2.利用键值对遍历
      在这里插入图片描述

    • 3.结合Lambda表达式遍历
      在这里插入图片描述

5. 注意事项

  1. 有序性:LinkedHashMap 是有序的集合,它保持元素插入的顺序。这意味着当你插入元素时,它们将按照插入的顺序排列,并且在迭代时也将按照相同的顺序返回。但是需要注意的是,如果使用访问顺序(accessOrder)启用了 LinkedHashMap,在访问已存在的元素时,该元素会被移动到链表的尾部。

  2. 性能:LinkedHashMap 的访问操作具有常量时间复杂度 O(1),但相对于普通的 HashMap,LinkedHashMap 需要维护额外的双向链表结构,因此在内存占用方面可能会更高一些。

  3. 线程安全:LinkedHashMap 是非线程安全的,如果需要在多线程环境下使用,可以通过使用 Collections.synchronizedMap 方法包装 LinkedHashMap,或者使用 ConcurrentHashMap 来实现线程安全的操作。

  4. 使用迭代器:遍历 LinkedHashMap 时,使用迭代器或者 for-each 循环可以保证元素的有序性。如果在遍历过程中对 LinkedHashMap 进行修改(如添加、删除元素),可能会导致 ConcurrentModificationException 异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774584.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

免费:阿里云学生服务器领取申请(2024新版教程)

2024年阿里云学生服务器免费领取&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之前&#xff0c;完成实验与认证任务&#xff0c;还可以免费续费6个月&#xff0c;阿里云百科aliyunbaike…

2023爱分析·大模型厂商全景报告|爱分析报告

01 研究范围定义 研究范围 大模型是指通过在海量数据上依托强大算力资源进行训练后能完成大量不同下游任务的模型。2023年以来&#xff0c;ChatGPT引爆全球大模型市场。国内众多大模型先后公测&#xff0c;众多互联网领军者投身大模型事业&#xff0c;使得大模型市场进入“百团…

Redis篇之过期淘汰策略

一、数据的过期策略 1.什么是过期策略 Redis对数据设置数据的有效时间&#xff0c;数据过期以后&#xff0c;就需要将数据从内存中删除掉。可以按照不同的规则进行删除&#xff0c;这种删除规则就被称之为数据的删除策略&#xff08;数据过期策略&#xff09;。 2.过期策略-惰…

【C语言自定义类型详解进阶】结构体(补充结构体的对齐和位段,一口气看完系列,央妈都点赞的博文)

目录 1.结构体 1.1 结构的基础知识 1.2 结构的声明 1.2.1特殊的声明&#xff08;匿名结构体类型&#xff09; 1.3结构体变量的定义 1.4关于匿名结构体类型的补充 1.5结构体的自引用 1.6结构体变量的初始化 2.结构体内存对齐&#xff08;重点&#xff09; 2.1偏移量补…

Redis篇之缓存雪崩

一、什么的缓存雪崩 缓存雪崩&#xff1a;在同一时间段大量的缓存key同时失效或者redis服务宕机&#xff0c;导致大量请求到达数据库给数据库带来巨大压力&#xff0c;可能导致数据库崩了。 二、应该怎么解决 1.给不同的Key的TTL添加随机值 2.利用Redis集群提高服务的可用性 3…

【人工智能】人工智能 – 引领未来科技的潮流

写在前面 引言红利挑战结论 引言 人工智能是指使计算机系统表现出类似于人类智能的能力。其目标是实现机器具备感知、理解、学习、推理和决策等智能行为。人工智能的发展可以追溯到上世纪50年代&#xff0c;随着计算机技术和算法的不断进步&#xff0c;人工智能得以实现。 今天…

QML中常见热区及层级结构

目录 引言层级结构默认层级结构z值作用范围遮罩实现-1的作用 热区嵌套与普通元素与其他热区与Flickable 事件透传总结 引言 热区有很多种&#xff0c;诸如MouseArea、DropArea、PinchArea等等&#xff0c;基本都是拦截对应的事件&#xff0c;允许开发者在事件函数对事件进行响…

米贸搜|Facebook在购物季使用的Meta广告投放流程

一、账户简化 当广告系列开始投放后&#xff0c;每个广告组都会经历一个初始的“机器学习阶段”。简化账户架构可以帮助AI系统更快获得广告主所需的成效。例如&#xff1a; 每周转化次数超过50次的广告组&#xff0c;其单次购物费用要低28%&#xff1b;成功结束机器学习阶段的…

图像处理入门:OpenCV的基础用法解析

图像处理入门&#xff1a;OpenCV的基础用法解析 引言OpenCV的初步了解深入理解OpenCV&#xff1a;计算机视觉的开源解决方案什么是OpenCV&#xff1f;OpenCV的主要功能1. 图像处理2. 图像分析3. 结构分析和形状描述4. 动态分析5. 三维重建6. 机器学习7. 目标检测 OpenCV的应用场…

嵌入式中轻松识别STM32单片机是否跑飞方法

单片机项目偶尔经常出现异常&#xff0c;不知道是程序跑飞了&#xff0c;还是进入某个死循环了&#xff1f; 因为发生概率比较低&#xff0c;也没有规律&#xff0c;所以没办法在线调试查找问题。 结合这个问题&#xff0c;给大家分享一下用ST-LINK Utility识别单片机程序是否…

Linux版Black Basta勒索病毒针对VMware ESXi服务器

前言 Black Basta勒索病毒是一款2022年新型的勒索病毒&#xff0c;最早于2022年4月被首次曝光&#xff0c;主要针对Windows系统进行攻击&#xff0c;虽然这款新型的勒索病毒黑客组织仅仅才出来短短两个多月的时间&#xff0c;就已经在其暗网平台上已经公布了几十个受害者之多&…

编译原理实验1——词法分析(python实现)

文章目录 实验目的实现定义单词对应的种别码定义输出形式&#xff1a;三元式python代码实现运行结果检错处理 总结 实验目的 输入一个C语言代码串&#xff0c;输出单词流&#xff0c;识别对象包含关键字、标识符、整型浮点型字符串型常数、科学计数法、操作符和标点、注释等等。…

[计算机提升] 还原系统:系统映像

6.4 还原系统&#xff1a;系统映像 1、打开系统设置&#xff0c;进入到恢复页面&#xff0c;然后点击高级启动中的立即重新启动进入到高级启动页面。 2、点击疑难解答 3、点击高级选项 4、点选查看更多恢复选项到下一步系统映像修复&#xff1a; 5、点选系统映像恢复 …

Poller描述符监控类实现(模块四)

目录 类功能 类设计 类实现 编译 类功能 类设计 //Poller描述符监控类 #define MAX_EPOLLEVENTS class Poller{private:int _epfd;struct epoll_event _evs[MAX_EPOLLEVENTS];std::unordered_map<int, Channel *> _channels;private:// 对epoll的直接操作void Updat…

探索C语言中的联合体与枚举:数据多面手的完美组合!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言学习 贝蒂的主页&#xff1a;Betty‘s blog 1. 联合体的定义 联合体又叫共用体&#xff0c;它是一种特殊的数据类型&…

Qt信号和槽机制(什么是信号和槽,connect函数的形式,按钮的常用信号,QWidget的常用槽,自定义槽函数案例 点击按钮,输出文本)

一.什么是信号和槽 信号槽式Qt中的一个很重要的机制。信号槽实际上是观察者模式,当发生了感兴趣的事件&#xff0c;某一个操作就会被自动触发。当某个事件发生之后&#xff0c;比如按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号。这种发出类似广播。如果有对象对…

Mysql为什么使用B+Tree作为索引结构

B树和B树 一般来说&#xff0c;数据库的存储引擎都是采用B树或者B树来实现索引的存储。首先来看B树&#xff0c;如图所示&#xff1a; B树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对于数…

Elasticsearch: 非结构化的数据搜索

很多大数据组件在快速原型时期都是Java实现&#xff0c;后来因为GC不可控、内存或者向量化等等各种各样的问题换到了C&#xff0c;比如zookeeper->nuraft(https://www.yuque.com/treblez/qksu6c/hu1fuu71hgwanq8o?singleDoc# 《olap/clickhouse keeper 一致性协调服务》)&a…

航芯ACM32G103开发板评测 08 ADC Timer外设测试

航芯ACM32G103开发板评测 08 ADC Timer外设测试 1. 软硬件平台 ACM32G103 Board开发板MDK-ARM Keil 2. 定时器Timer 在一般的MCU芯片中&#xff0c;定时器这个外设资源是非常重要的&#xff0c;一般可以分为SysTick定时器&#xff08;系统滴答定时器&#xff09;、常规定时…

XGBOOST算法Python实现(保姆级)

摘要 XGBoost算法&#xff08;eXtreme Gradient Boosting&#xff09;在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。 目录 0 绪论 一、材料准备 二、算法原理 三、算法Python实现 3…