📜  JavaEnumMap和EnumSet的区别

📅  最后修改于: 2021-09-15 01:36:36             🧑  作者: Mango

EnumMap 和 EnumSet 都是在Java集合中定义的类。在本文中,我们将了解 EnumMap 和 EnumSet 之间的区别。 EnumMap 是 Map 接口的专门实现,EnumSet 是 Set 接口的专门实现。它们之间存在一些差异。所以我们试图列出 EnumMap 和 EnumSet 之间的区别。

1. EnumMap : EnumMap 是枚举类型的 Map 接口的特殊实现。它实现了 Map 接口并在Java扩展了 AbstractMap。

  • EnumMap 比 HashMap 快得多。
  • EnumMap 类是Java集合框架的成员。
  • EnumMap 是按其键的自然顺序维护的有序集合。
  • 每个 EnumMap 实例的所有键必须是相同枚举类型的键。
  • 如果我们尝试插入空键, 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 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());
        }
    }
}


Java
// Java program to demonstrate the EnumSet
  
import java.util.*;
class enumSetExample {
    enum Days {
        Sunday,
        Monday,
        Tuesday,
        Wendensday,
        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());
        }
    }
}


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

2. EnumSet EnumSet 是枚举类型的 Set 接口的特殊实现。它实现了 Set 接口并扩展了Java的AbstractSet。

  • EnumSet 类是Java集合框架的成员,它不是同步的。
  • EnumSet 中的所有元素必须来自单个枚举类型,该枚举类型在显式或隐式创建集合时指定。
  • EnumSet 比 HashSet 快得多。
  • 如果我们尝试插入 null 对象, EnumSet 不允许插入 null 对象,它将抛出NullPointerException

下面是 EnumSet 的实现:

Java

// Java program to demonstrate the EnumSet
  
import java.util.*;
class enumSetExample {
    enum Days {
        Sunday,
        Monday,
        Tuesday,
        Wendensday,
        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 is a specialized implementation of the Map interface for the enumeration types. EnumSet is a specialized implementation of the Set interface for the enumeration types.
EnumMap is internally represented as an array. EnumSet is internally represented as a BitVector.
EnumMap doesn’t allow to insert the null keys, however, null values can be inserted. EnumSet doesn’t allow inserting null elements.
EnumMap is not an abstract class. EnumSet is an abstract class.
EnumMap is not an abstract class therefore, we can create an instance of this class. EnumSet is an abstract class therefore, we can not create the instance of this class.