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. |