Java 中的 EnumMap2024年9月10日 | 阅读 6 分钟 在 Java 编程的世界里,数据结构在正确地处理和组织数据方面起着关键作用。其中一种非常有用的数据结构就是 EnumMap。EnumMap 是 Java 中专门为枚举(Enum)键设计的 Map 实现。在本节中,我们将讨论 EnumMap,探讨它们是什么,以及如何有效地使用它们。 什么是 EnumMap?Java 中的 EnumMap 是 Map 接口的一种高性能实现,它使用枚举值作为键。它是 java.util 包的一部分,并于 Java 1.5 引入。EnumMap 特别适用于键仅限于特定枚举值集合的场景,因为它提供了一种紧凑高效的方式来存储和访问数据。 使用 EnumMap 的主要优势之一是它们高度专业化,与 HashMap 等通用 Map 实现相比,操作速度更快、效率更高。EnumMap 可以被视为一个值的数组,其中每个值的索引对应于枚举键的序数值(ordinal value)。这种直接映射使得 EnumMap 在各种用例中都非常高效。 创建 EnumMap要创建 EnumMap,我们需要指定定义 Map 键的枚举类。让我们考虑一个使用枚举来表示一周的例子的简单示例。 EnumMapExample.java 输出 {MONDAY=Work, TUESDAY=Gym, WEDNESDAY=Meetings, THURSDAY=Study, FRIDAY=Relax, SATURDAY=Family Time, SUNDAY=Chores} 正如我们所见,EnumMap 保持了枚举值的顺序,并将每个值与相应的任务关联起来。 访问 EnumMap 中的值访问 EnumMap 中的值非常简单。我们可以使用 `get` 方法检索与特定枚举键关联的值。这是一个例子: EnumMapAccessExample.java 输出 On WEDNESDAY, you should: Meetings 在此示例中,我们检索与 `Day.WEDNESDAY` 关联的任务,并在输出中显示它。 EnumMap 与 HashMap现在我们对 EnumMap 有了基本了解,您可能会想知道它与更常用的 HashMap 相比如何。EnumMap 在使用枚举键时有几个优点:
虽然 EnumMap 提供了这些优势,但重要的是要注意它们适用于枚举键是自然匹配的特定用例。如果您的键仅限于一组有限的枚举值,那么 HashMap 或其他 Map 实现可能更合适。 迭代 EnumMap迭代 EnumMap 与迭代其他 Map 实现类似。您可以使用增强的 for 循环或其他方法(如 `entrySet`)来遍历条目。 EnumMapIterationExample.java 输出 On MONDAY, you should: Work On TUESDAY, you should: Gym On WEDNESDAY, you should: Meetings On THURSDAY, you should: Study On FRIDAY, you should: Relax On SATURDAY, you should: Family Time On SUNDAY, you should: Chores 在此示例中,我们遍历 EnumMap 并打印每个条目,包括枚举键(一周中的某一天)和关联的任务。 EnumMap 提供了各种用于执行各种操作的方法,包括添加、删除和检查键值对是否存在。一些常用的方法包括: `put(Enum key, V value)`: 将指定的值与 EnumMap 中的指定枚举键关联起来。 `get(Enum key)`: 返回与指定枚举键关联的值,如果键不存在则返回 null。 `remove(Enum key)`: 删除与指定枚举键关联的键值对。 `containsKey(Enum key)`: 检查 EnumMap 是否包含指定的键。 `size()`: 返回 EnumMap 中的键值映射数量。 让我们来看一个演示这些方法的示例: EnumMapMethodsExample.java 输出 On WEDNESDAY, you should: Meetings Removed SATURDAY from the EnumMap. SUNDAY exists in the EnumMap: true Number of entries in the EnumMap: 6 在此示例中,我们对 EnumMap 执行各种操作,包括检索、删除、检查存在以及计数条目。 EnumMap 的用例EnumMap 非常适合您拥有有限且已知的枚举键集,并且需要将特定值与每个键关联起来的场景。以下是一些 EnumMap 的常见用例:
性能考虑EnumMap 在处理枚举键时专为提高效率而设计。对于有限且已知的键集,它们通常比通用的 Map 实现(如 HashMap)更快、更节省内存。但是,了解它们的优点和局限性至关重要。 迭代顺序: EnumMap 根据其序数值保持枚举值的顺序。如果我们想要不同的排序,我们可能需要考虑使用不同的数据结构。 Null 值: EnumMap 不允许 null 键,尝试使用 null 作为键将导致 `NullPointerException`。 总之,我们已经探索了 Java 中的 EnumMap 的世界,从它们的基本原理和用法到更高级的操作和用例。EnumMap 是一种专门且高效的处理枚举键的方式,在性能、类型安全和紧凑性方面具有多种用途。 |
Java LinkedHashMap 与 HashMap LinkedHashMap 与 HashMap 非常相似,并增加了维护插入元素顺序的功能。HashMap 提供了插入、删除和搜索元素的简便方法,但它不提供维护和跟踪……
阅读 10 分钟
CRUD代表创建、读取/检索、更新和删除,这些是针对持久存储执行的基本操作。CRUD涉及使用标准化的HTTP方法,并侧重于数据操作。CRUD操作是数据中心的,并与HTTP方法的标准化使用保持一致。CRUD...
阅读 13 分钟
java.util 包包含 IntSummaryStatistics 类。在对整数流执行操作时,它接受 Integer 对象集合,并且可能非常有效。它跟踪已处理的数字数量、它们的总和以及...
阅读 3 分钟
在 Java 中进行文本格式化和字符串操作时,某些字符起着至关重要的作用。行提字符就是其中之一。在 Java 中,行提字符由转义序列“\n”表示。它看起来可能是一个...
阅读 4 分钟
在计算生物学中,经常需要找到 DNA 序列中的全局最小核苷酸,以及给定范围内的全局最小核苷酸。DNA 序列由四种核苷酸组成。由字母表示的四种碱基是腺嘌呤 (A)、胞嘧啶 (C)、鸟嘌呤...
阅读 6 分钟
当 I/O 操作尝试发生在已关闭的通道上,或者通道对预期操作已关闭时,会触发 ClosedChannelException 类。也就是说,如果抛出此异常。然而,这并不意味着通道已完全关闭,只是意味着...
阅读 4 分钟
Stern-Brocot 序列是一个迷人的数学结构,它源于数论,并提供了一种系统的方法来枚举所有以最简形式表示的正有理数。该序列以 Moritz Stern 和 Achille Brocot 命名,在计算机科学、连分数甚至机械……
阅读 6 分钟
在 Java 中,当我们创建一个类的对象时,默认情况下该类的构造函数始终会被调用。我们可以通过跟踪构造函数被调用的次数来直接计算对象的数量。在本节中,我们将学习如何...
阅读 2 分钟
java.text.ChoiceFormat 是一个包含 parse() 函数的类。要检索 ChoiceFormat 对象中特定格式的限制值,请使用 ChoiceFormat 类。语法:public Number parse(String text_name, ParsePosition status_Of_choice) 参数:- 其中此方法接受的参数是 text_name:即文本...
阅读 3 分钟
勾股数(Pythagorean triplet)是由三个正整数 (a, b, c) 组成的集合,它们满足以下方程:a² + b² = c² 在这个方程中,'c' 是最大的数字,代表直角三角形的斜边,而 'a' 和 'b' 是...
阅读 17 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India