49天精通Java,第26天,LinkedHashSet、LinkedHashMap、EnumSet、EnumMap

news/2024/4/19 8:02:23/文章来源:https://blog.csdn.net/guorui_java/article/details/129908720

在这里插入图片描述

目录

    • 一、链接散列集LinkedHashSet
    • 二、链接散列映射LinkedHashMap
    • 三、枚举集EnumSet
      • 1、EnumSet
      • 2、枚举集可以用来实现一些特殊的功能,例如:
      • 3、枚举集的常用方法包括:
    • 四、枚举映射EnumMap
      • 1、EnumMap
      • 2、枚举映射可以用来实现一些特殊的功能,例如:
      • 3、枚举映射的常用方法包括:

大家好,我是哪吒。

一、链接散列集LinkedHashSet

Java中的链接散列集指的是HashSet和LinkedHashSet这两个集合实现类。它们都是基于哈希表(Hash Table)实现的,链式散列是解决哈希冲突的一种方法。

HashSet和LinkedHashSet内部使用哈希表来存储元素,当多个元素经过哈希函数计算后产生同一个索引位置时,就会产生哈希冲突。为了解决哈希冲突,HashSet和LinkedHashSet使用链式散列技术,即在哈希表每个索引位置上维护一个链表,将所有哈希值相同的元素存放在同一个链表中,从而实现快速查找和添加元素。

HashSet和LinkedHashSet的区别在于,前者是无序集合,而后者是有序集合。具体来说,LinkedHashSet内部使用一个双向链表来维护元素的插入顺序,因此遍历LinkedHashSet时可以按照元素插入的顺序进行。需要注意的是,在使用HashSet和LinkedHashSet时,应根据具体的业务需求和性能要求选择合适的实现类。

在这里插入图片描述

LinkedHashMap的常用方法包括:

  1. put(K key, V value):将一个键值对添加到链接散列集中;
  2. get(K key):返回一个键值对,如果键不存在则返回null;
  3. remove(K key):从链接散列集中删除一个键值对;
  4. containsKey(K key):检查一个键是否存在于链接散列集中;
  5. size():返回链接散列集中键值对的数量;

这些方法都是基于链表实现的,因此它们的时间复杂度都是O(1),其中n是Map中元素的数量。

二、链接散列映射LinkedHashMap

Java中的链接散列映射指的是HashMap和LinkedHashMap这两个键值对映射集合实现类。它们都是基于哈希表实现的,链式散列是解决哈希冲突的一种方法。

具体来说,HashMap和LinkedHashMap内部使用哈希表来存储键值对,当多个键经过哈希函数计算后产生同一个索引位置时,就会产生哈希冲突。为了解决哈希冲突,HashMap和LinkedHashMap使用链式散列技术,即在哈希表每个索引位置上维护一个链表,将所有哈希值相同的键值对存放在同一个链表中,从而实现快速查找和添加元素。

HashMap和LinkedHashMap的区别在于,前者是无序键值对集合,而后者是有序键值对集合。具体来说,LinkedHashMap内部使用一个双向链表来维护键值对的插入顺序,因此遍历LinkedHashMap时可以按照键值对插入的顺序进行。需要注意的是,在使用HashMap和LinkedHashMap时,应根据具体的业务需求和性能要求选择合适的实现类。

在这里插入图片描述

LinkedHashMap的常用方法包括:

  1. put(K key, V value):将一个键值对添加到链接散列映射中;
  2. get(K key):返回一个键值对,如果键不存在则返回null;
  3. remove(K key):从链接散列映射中删除一个键值对;
  4. containsKey(K key):检查一个键是否存在于链接散列映射中;
  5. size():返回链接散列集中键值对的数量;

这些方法都是基于链表实现的,因此它们的时间复杂度都是O(1),其中n是Map中元素的数量。

三、枚举集EnumSet

1、EnumSet

Java中的枚举集指的是基于枚举类型实现的集合类,即EnumSet。

它是一个专门用于存储枚举类型值的高效集合实现类,可以实现基本操作(如添加、删除、查找等)和集合运算(如交、并、补等),同时还提供了高性能的迭代器,可以按照枚举类型常量在内存中出现的顺序进行遍历。

EnumSet使用位向量(bit vector)实现,即将每个枚举类型常量映射到一个二进制位上,从而快速进行集合运算。由于EnumSet只能存储枚举类型值,因此它具有类型安全性、性能高效、空间利用率高等优点。

EnumSet是一个抽象类,不能直接实例化,但可以通过EnumSet的静态工厂方法创建实例,例如EnumSet.of()、EnumSet.range()等。此外,EnumSet也支持各种集合转换操作,可以与其他集合实现类进行互相转换。

2、枚举集可以用来实现一些特殊的功能,例如:

  1. 枚举常量:枚举集中的每个枚举常量都是一个有限的常量值,可以用来表示一组不同的值。
  2. 枚举变量:枚举集中的每个枚举变量都是一个枚举常量,可以用来表示一个不同的值。
  3. 枚举类型:枚举集中的每个枚举类型都是一个枚举常量,可以用来表示一个不同的类型。

在这里插入图片描述

3、枚举集的常用方法包括:

  1. of(T value):返回一个枚举集,其中包含了所有值为 value 的枚举常量;
  2. isEmpty():检查枚举集是否为空;
  3. size():返回枚举集中枚举常量的数量;
  4. toArray():返回枚举集中所有枚举常量的数组;
  5. toArray(T[] a):返回枚举集中所有枚举常量的数组,其中 a 是一个指向 T 类型数组的指针;
  6. toArray(T[] a, int fromIndex, int toIndex):返回枚举集中所有枚举常量的数组,其中 a 是一个指向 T 类型数组的指针,从 fromIndex 开始,到 toIndex 结束;
  7. toArray(T[] a, int fromIndex, int toIndex, int length):返回枚举集中所有枚举常量的数组,其中 a 是一个指向 T 类型数组的指针,从 fromIndex 开始,到 toIndex 结束,长度为 length;
  8. toArray(T[] a, int fromIndex, int toIndex, int length, T[] result):返回枚举集中所有枚举常量的数组,其中 a 是一个指向 T 类型数组的指针,从 fromIndex 开始,到 toIndex 结束,长度为 length,结果数组 result 是一个指向 T 类型数组的指针;

四、枚举映射EnumMap

1、EnumMap

Java中的枚举映射指的是基于枚举类型实现的键值对集合类,即EnumMap。它是一个专门用于存储枚举类型作为键的键值对集合实现类,可以实现基本操作(如添加、删除、查找等)和集合运算(如交、并、补等),同时还提供了高性能的迭代器,可以按照枚举类型常量在内存中出现的顺序进行遍历。

EnumMap使用数组实现,数组的长度等于枚举类型常量数目,每个位置上存储的是该枚举类型常量所对应的值。由于EnumMap只能存储枚举类型作为键,因此它具有类型安全性、性能高效、空间利用率高等优点。

需要注意的是,EnumMap也是一个抽象类,不能直接实例化,但可以通过EnumMap的构造方法或静态工厂方法创建实例,例如new EnumMap<>(MyEnum.class)、EnumMap.copyOf()等。此外,EnumMap也支持各种集合转换操作,可以与其他集合实现类进行互相转换。

2、枚举映射可以用来实现一些特殊的功能,例如:

  1. 枚举常量:枚举映射中的每个枚举常量都是一个有限的常量值,可以用来表示一组不同的值。
  2. 枚举变量:枚举映射中的每个枚举变量都是一个枚举常量,可以用来表示一个不同的值。
  3. 枚举类型:枚举映射中的每个枚举类型都是一个枚举常量,可以用来表示一个不同的类型。

在这里插入图片描述

3、枚举映射的常用方法包括:

  1. put(K key, V value):将一个枚举常量值添加到枚举映射中;
  2. get(K key):返回一个枚举常量值,如果枚举常量不存在则返回null;
  3. remove(K key):从枚举映射中删除一个枚举常量值;
  4. containsKey(K key):检查一个枚举常量值是否存在于枚举映射中;
  5. size():返回枚举映射中枚举常量的数量;
  6. isEmpty():检查枚举映射是否为空;
  7. getEntry(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  8. getEntry(K key, boolean onlyIfAbsent, Entry<K, V> next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;
  9. getEntryValues(K key):返回一个枚举常量值,如果枚举常量不存在则返回null;
  10. getEntryValues(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  11. getEntryValues(K key, boolean onlyIfAbsent, Entry<K, V> next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;
  12. getEntryKeys(K key):返回一个枚举常量值,如果枚举常量不存在则返回null;
  13. getEntryKeys(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  14. getEntryKeys(K key, boolean onlyIfAbsent, Entry<K, V> next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;
  15. getEntryValues(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  16. getEntryValues(K key, boolean onlyIfAbsent, Entry<K, V> next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;

在这里插入图片描述

🏆本文收录于,Java基础教程系列。

目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于朴素贝叶斯分类器的钞票真伪识别模型

基于朴素贝叶斯分类器的钞票真伪识别模型 内容 本实验通过实现钞票真伪判别案例来展开学习朴素贝叶斯分类器的原理及应用。 本实验的主要技能点&#xff1a; 1、 朴素贝叶斯分类器模型的构建 2、 模型的评估与预测 3、 分类概率的输出 源码下载 环境 操作系统&#xf…

springboot学习2

一、spring boot自动装配原理 pom.xml spring-boot-dependencies 核心依赖在父工程中 在写或者引入一些spring boot依赖的时候&#xff0c;不需要指定版本&#xff0c;因为有这些版本仓库启动器 <dependency><groupId>org.springframework.boot</groupId>&…

数据结构刷题笔记 | 数组、字符串、链表、栈、队列、数、图

本篇为笔者学习数据结构时&#xff0c;在牛客网站的刷题笔记。 数组——长度固定 数组是一种对象&#xff0c;不属于原生类&#xff0c;数组的大小确定之后不可改变。【原生类指未被实例化的类&#xff0c;数组一般指实例化&#xff0c;被分配空间的类】数组常用的两种基本操作…

C#,码海拾贝(18)——矩阵的(一般)三角分解法(Triangular Decomposition)之C#源代码,《C#数值计算算法编程》源代码升级改进版

1 三角分解法 Triangular Decomposition 三角分解法亦称因子分解法&#xff0c;由消元法演变而来的解线性方程组的一类方法。设方程组的矩阵形式为Axb&#xff0c;三角分解法就是将系数矩阵A分解为一个下三角矩阵L和一个上三角矩阵U之积&#xff1a;ALU&#xff0c;然后依次解…

数字化体验时代,企业如何做好内部知识数字化管理

随着数字化时代的到来&#xff0c;企业内部的知识管理也面临着新的挑战和机遇。数字化技术的应用&#xff0c;可以极大地提高企业内部知识的数字化管理效率和质量&#xff0c;从而提升企业内部的工作效率、员工满意度和企业竞争力。本文将从数字化时代的背景出发&#xff0c;探…

大数据 | HBase基本工作原理

前文回顾&#xff1a;MapReduce基本原理 目录 &#x1f4da;HBase基本介绍 &#x1f407;HBase的设计目标和功能特点 &#x1f407;HBase在Hadoop中的生态环境 &#x1f4da;HBase的数据模型 &#x1f407;逻辑数据模型 &#x1f407;物理存储格式 &#x1f4da;HBase基…

使用golang连接kafka

1 下载&#xff0c;配置&#xff0c;启动 kafka 下载链接 配置修改 在config目录下的server文件和zookeeper文件&#xff0c;其中分别修改kafka的日志保存路径和zookeeper的数据保存路径。 启动kafka 先启动kafka自带的zookeeper&#xff0c;在kafka的根目录下打开终端&a…

教程 | 多通道fNIRS数据的预处理和平均(下)

前言 前文近红外数据的预处理和平均&#xff08;上&#xff09;提到fNIRS是一种评估氧和脱氧血红蛋白浓度变化的方法&#xff0c;可与fMRI相媲美。fNIRS的不足是它的空间分辨率比fMRI差&#xff0c;但其优点是有更高的时间分辨率&#xff0c;并允许测量无法通过fMRI扫描仪测试…

VsCode 将源代码管理中的新旧代码上下对比变为左右对比

文章目录一、默认设置二、左右布局变成了上下布局三、解决方法&#xff1a;将上下布局改为左右布局1&#xff1a;找到右上角的更多设置2&#xff1a;点击更多设置后点击【切换到并排视图】3&#xff1a;效果如下&#xff08;还是原来的效果&#xff09;四、左右切换成上下总结一…

Python与各种开发语言比较、对比优略

选择要学习的技术和选择要上的大学一样重要&#xff0c;如果选错了&#xff0c;你将来不仅得不到自己喜欢的高薪工作&#xff0c;反而会弄得一堆麻烦。如果你打开了这篇文章&#xff0c;说明你已经考虑选择Python开发作为你以后的职业了。在这篇文章里&#xff0c;我们会详细找…

stata变量引用

stata变量引用–潘登同学的stata笔记 文章目录stata变量引用--潘登同学的stata笔记变量生成gen命令通配符&#xff1a;*, ?, -因子变量时间序列变量命名、前缀与标签变量命名、添加前缀通配符与批量重命名变量标签数字-文字对应表CSMAR数据处理查看、查找变量单值、暂元单值暂…

超详细!腾讯NLP算法岗面经(已offer)

作者 | ZipZou整理 | NewBeeNLP面试锦囊之面经分享系列&#xff0c;持续更新中 可以后台回复"面试"加入交流讨论组噢分享一篇旧文&#xff0c;希望大家都成功上岸~写在前面首先来段简单的自我介绍&#xff1a;2021届硕士&#xff0c;硕士期间未有实习经历&#xff0c…

FE_CSS 页面布局之浮动

网页布局的本质——用 CSS 来摆放盒子。 把盒子摆放到相应位置。CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序)&#xff1a; 普通流&#xff08;标准流&#xff09;浮动定位 1 标准流&#xff08;普通流/文档流&#xff09; 所谓的标准流: 就是标签按照规定…

Runtime命令参数字符串和数组比较

问题 最近有个问题本地执行 ssh -p 8084 root10.224.122.51 \"ssh -p 22 root192.168.5.157 mkdir -p /opt/dw-release/pdld-admin\"程序执行总是报错&#xff1a; No such file or directory 但是直接在终端执行正常&#xff0c;这就很奇怪。肯定能推出是程序执行…

10.1 二重积分的概念与性质

学习目标&#xff1a; 学习二重积分&#xff0c;我会采取以下几个步骤&#xff1a; 了解基本概念&#xff1a;首先我会学习二重积分的定义及其意义&#xff0c;了解二重积分的性质和特点&#xff0c;以及二重积分的计算方法。 理解二重积分的几何意义&#xff1a;我会通过画图…

【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

LeetCode——二叉树的非递归遍历

144. 二叉树的前序遍历 给你二叉树的根节点root&#xff0c;返回它节点值的前序遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1…

PDF怎么转CAD文件?(免费!高效转换方法汇总)

一般而言&#xff0c;PDF图纸是不能修改的。若需修改&#xff0c;则需将PDF转CAD&#xff0c;此时如何满足PDF转CAD的需求呢&#xff1f;今天&#xff0c;我将教你两种免费的PDF转CAD的方法&#xff0c;助力高效办公。 1.本地软件转换法 这是用本地软件转换方法&#xff0c;支…

JVM之GC日志解读

通过阅读Gc日志&#xff0c;我们可以了解Java虚拟机内存分配与回收策略。 内存分配与垃圾回收的参数列表 -XX:PrintGC 输出GC日志。类似&#xff1a;-verbose:gc-XX:PrintGCDetails 输出GC的详细日志-XX:PrintGCTimestamps 输出GC的时间戳&#xff08;以基准时间的形式&#xf…

软件企业利用ChatGPT的正确姿势

先来看一下现在市场环境 ChatGPT作为现象级产品横空出世之后&#xff0c;极大地带动了大语言模型产业和生成式AI&#xff08;AIGC&#xff09;产业的蓬勃发展。海外市场上&#xff0c;OpenAI、微软、谷歌、Meta等巨头动作频频。中国市场更是风起云涌&#xff0c;百度、阿里、华…