Java中EnumMap和EnumSet的区别
admin
2023-07-30 20:15:32
0

EnumMap和EnumSet都是定义在java集合中的类。在这篇文章中,我们将了解EnumMap和EnumSet的区别。EnumMap是Map接口的专门实现,EnumSet是Set接口的专门实现。它们之间存在着一些差异。所以我们下面来看看EnumMap和EnumSet之间的区别。

EnumMap

EnumMap是Map接口的一个专门实现,用于枚举类型。它实现了Map接口并扩展了Java中的AbstractMap。

  • EnumMap比HashMap快得多。
  • EnumMap类是Java集合框架的一个成员。
  • EnumMap是一个有序的集合,按照其键的自然顺序进行维护。
  • 每个EnumMap实例的所有键必须是相同枚举类型的键。
  • EnumMap不允许插入空键,如果我们试图插入空键,它将抛出NullPointerException
  • EnumMap内部表示为数组以获得更好的性能。

下面是EnumMap的实现 –

// Java program to illustrate working of EnumMap

import java.util.*;

class EnumMapExample {

    public enum Fruits {
        Apple,
        Mango,
        Orange,
        Banana;
    }

    public static void main(String[] args)
    {
        // Creating an EnumMap of the Fruits enum
        EnumMap enumMap
            = new EnumMap<>(Fruits.class);

        // Insert using put() method
        enumMap.put(Fruits.Apple, 1);
        enumMap.put(Fruits.Mango, 2);
        enumMap.put(Fruits.Orange, 3);
        enumMap.put(Fruits.Banana, 4);

        // Printing size of EnumMap
        System.out.println("Size of EnumMap: " + enumMap.size());
        // Printing the EnumMap
        for (Map.Entry m : enumMap.entrySet()) {
            System.out.println(m.getKey() + " " + m.getValue());
        }
    }
}

运行结果:

Size of EnumMap: 4
Apple 1
Mango 2
Orange 3
Banana 4

EnumSet

EnumSet是Set接口的一个专门实现,用于枚举类型。它实现了Set接口并扩展了Java中的AbstractSet。

  • EnumSet类是Java集合框架的一个成员,它不是同步的。
  • EnumSet中的所有元素都必须来自一个枚举类型,这个枚举类型在创建集合时被明确或隐含地指定。
  • EnumSet比HashSet快得多。
  • EnumSet不允许插入空对象,如果我们试图插入空对象,它将抛出NullPointerException

下面是EnumSet的实现:

// Java program to demonstrate the EnumSet

import java.util.*;
class enumSetExample {
    enum Days {
        Sunday,
        Monday,
        Tuesday,
        Wednesday,
        Thursday
    }
    public static void main(String args[])
    {
        // Creating an EnumSet
        EnumSet days = EnumSet.of(Days.Monday, Days.Tuesday);
        Iterator itr = days.iterator();

        // Iterate and print elements to the console
        System.out.println("EnumSet : ");
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

运行结果:

EnumSet : 
Monday
Tuesday

EnumMap和EnumSet的区别

EnumMap EnumSet
EnumMap是Map接口的一个专门实现,用于枚举类型。 EnumSet是Set接口的一个专门实现,用于枚举类型。
EnumMap内部表示为一个数组。 EnumSet内部表示为一个BitVector。
EnumMap不允许插入空键,但是可以插入空值。 EnumSet不允许插入空元素。
EnumMap不是一个抽象的类。 EnumSet是一个抽象类。
EnumMap不是一个抽象类,因此,我们可以创建这个类的实例。 EnumSet是一个抽象类,因此,我们不能创建这个类的实例。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...