EnumMap 和 EnumSet 都是 java collection 中定義的類。在本文中,我們將了解EnumMap 和 EnumSet 之間的區別。 EnumMap 是Map 接口的專門實現,EnumSet 是Set 接口的專門實現。它們之間存在一些差異。因此,我們嘗試列出EnumMap 和 EnumSet 之間的差異。
EnumMap:EnumMap 是一個專門的實現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. EnumSet:EnumSet 是一個專門的實現放接口用於枚舉類型。它實現了 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是一個抽象類,因此我們無法創建該類的實例。 |
相關用法
- Java EnumMap containsValue()用法及代碼示例
- Java EnumMap hashCode()用法及代碼示例
- Java EnumMap putAll()用法及代碼示例
- Java EnumMap clear()用法及代碼示例
- Java EnumMap clone()用法及代碼示例
- Java EnumMap containsKey()用法及代碼示例
- Java EnumMap containsValue(value)用法及代碼示例
- Java EnumMap entrySet()用法及代碼示例
- Java EnumMap equals()用法及代碼示例
- Java EnumMap get()用法及代碼示例
- Java EnumMap keySet()用法及代碼示例
- Java EnumMap put()用法及代碼示例
- Java EnumMap putAll(map)用法及代碼示例
- Java EnumMap remove()用法及代碼示例
- Java EnumMap size()用法及代碼示例
- Java EnumMap values()用法及代碼示例
- Java EnumMap用法及代碼示例
- Java Enum clone()用法及代碼示例
- Java Enum compareTo()用法及代碼示例
- Java Enum equals()用法及代碼示例
- Java Enum finalize()用法及代碼示例
- Java Enum getDeclaringClass()用法及代碼示例
- Java Enum hashCode()用法及代碼示例
- Java Enum name()用法及代碼示例
- Java Enum ordinal()用法及代碼示例
注:本文由純淨天空篩選整理自prashant_srivastava大神的英文原創作品 Difference Between EnumMap and EnumSet in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。