Java EnumMap 与 HashMap 的区别

EnumMap 和 HashMap 都是实现了 Map 接口的类。但它们之间存在一些差异。因此,我们整理了 EnumMap 和 HashMap 之间的区别。

1. EnumMap: EnumMap 是专门为枚举类型实现的 Map 接口的专用类。它继承自 AbstractMap 并实现了 Java 中的 Map 接口。以下是 EnumMap 的几个要点:

  • EnumMap 类是 Java 集合框架的成员,并且它不是同步的。
  • EnumMap 是一个有序集合,并且它们按照键的自然顺序维护(键的自然顺序是指在枚举类型内部声明枚举常量的顺序)。
  • EnumMap 比 HashMap快得多。
  • 每个 EnumMap 实例的所有键必须是来自同一枚举类型的键。
  • EnumMap 不允许插入 null 键,如果我们尝试插入 null 键,它将抛出 NullPointerException
  • EnumMap 内部通过数组表示,因此它提供了更好的性能。

EnumMap 演示:

Java


CODEBLOCK_d546b279

Output

Size of EnumMap: 4
Sunday 1
Monday 2
Tuesday 3
Wednesday 4

2. HashMap: HashMap 是一个实现了 Map 接口的类。它以键和值对的形式存储数据,其中键应该是唯一的。如果您尝试插入重复的键,它将替换相应键的元素。它允许存储 null 键和 null 值,但应该只有一个 null 键和多个 null 值。Java HashMap 类似于 HashTable,但是它是不同步的。HashMap 不维护顺序,这意味着它不保证元素的任何特定顺序。
HashMap 演示:

Java


CODEBLOCK_e404d24c

Output

Size of map is: 3
20 Ram
10 Geeks
30 Shyam

EnumMap 和 HashMap 之间的区别

EnumMap

HashMap

EnumMap 是一个专用的 Map 实现,它仅使用 Enum 类型的键。

在 HashMap 中,我们可以使用 Enum 以及任何其他对象作为键。

它不允许存储 null 键。

它允许存储 null 键和值,但应该只有一个 null 键对象,并且可以有任意数量的 null 值。

EnumMap 内部使用数组

HashMap 内部使用 HashTable。

EnumMap 是一个专用的 Map 实现,它仅使用枚举类型的键。因此,EnumMap 的性能优于 HashMap。

HashMap 的性能略低于 EnumMap。

EnumMap 按照键的自然顺序(枚举常量声明的顺序)存储键。

在 HashMap 中,键没有顺序。

由于 EnumMap 内部使用数组并使用 ordinal() 按自然顺序存储键,因此不存在冲突的可能性。

HashMap 使用 hashCode() 来存储键,因此可能发生冲突。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/39014.html
点赞
0.00 平均评分 (0% 分数) - 0