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

在这里插入图片描述

目录

    • 一、链接散列集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时,应根据具体的业务需求和性能要求选择合适的实现类。

49天精通Java,第26天,LinkedHashSet、LinkedHashMap、EnumSet、EnumMap_第1张图片

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时,应根据具体的业务需求和性能要求选择合适的实现类。

49天精通Java,第26天,LinkedHashSet、LinkedHashMap、EnumSet、EnumMap_第2张图片

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. 枚举类型:枚举集中的每个枚举类型都是一个枚举常量,可以用来表示一个不同的类型。

49天精通Java,第26天,LinkedHashSet、LinkedHashMap、EnumSet、EnumMap_第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. 枚举类型:枚举映射中的每个枚举类型都是一个枚举常量,可以用来表示一个不同的类型。

49天精通Java,第26天,LinkedHashSet、LinkedHashMap、EnumSet、EnumMap_第4张图片

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 next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;
  9. getEntryValues(K key):返回一个枚举常量值,如果枚举常量不存在则返回null;
  10. getEntryValues(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  11. getEntryValues(K key, boolean onlyIfAbsent, Entry next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;
  12. getEntryKeys(K key):返回一个枚举常量值,如果枚举常量不存在则返回null;
  13. getEntryKeys(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  14. getEntryKeys(K key, boolean onlyIfAbsent, Entry next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;
  15. getEntryValues(K key, boolean onlyIfAbsent):返回一个枚举常量值,如果枚举常量不存在则返回null;
  16. getEntryValues(K key, boolean onlyIfAbsent, Entry next):返回一个枚举常量值,如果枚举常量不存在则返回null,并返回一个指向下一个枚举常量值的引用;

在这里插入图片描述

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

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

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

你可能感兴趣的:(49天精通Java,java,数据结构,开发语言)