當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。