当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java EnumMap和EnumSet的区别用法及代码示例


EnumMap 和 EnumSet 都是 java collection 中定义的类。在本文中,我们将了解EnumMap 和 EnumSet 之间的区别。 EnumMap 是Map 接口的专门实现,EnumSet 是Set 接口的专门实现。它们之间存在一些差异。因此,我们尝试列出EnumMap 和 EnumSet 之间的差异。

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

  • EnumMap 比 HashMap 快得多。
  • EnumMap 类是 Java Collections Framework 的成员。
  • EnumMap 是按其键的自然顺序维护的有序集合。
  • 每个EnumMap实例的所有键必须是相同enum类型的键。
  • EnumMap 不允许插入空键,如果我们尝试插入空键,将会抛出异常NullPointerException.
  • EnumMap 在内部表示为数组以获得更好的性能。

下面是EnumMap的实现:

Java


// 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<Fruits, Integer> 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

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

  • EnumSet 类是 Java Collections Framework 的成员,并且它不同步。
  • EnumSet 中的所有元素必须来自显式或隐式创建集合时指定的单个 enumeration type
  • EnumSet 比 HashSet 快得多。
  • EnumSet 不允许插入空对象,如果我们尝试插入空对象,它将抛出NullPointerException.

下面是EnumSet的实现:

Java


// 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> days
            = EnumSet.of(Days.Monday, Days.Tuesday);
        Iterator<Days> 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

Difference between EnumMap and EnumSet

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


相关用法


注:本文由纯净天空筛选整理自prashant_srivastava大神的英文原创作品 Difference Between EnumMap and EnumSet in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。