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是一个抽象类,因此,我们不能创建这个类的实例。