EnumMap和EnumSet都是定义在java集合中的类。在这篇文章中,我们将了解EnumMap和EnumSet的区别。EnumMap是Map接口的专门实现,EnumSet是Set接口的专门实现。它们之间存在着一些差异。所以我们下面来看看EnumMap和EnumSet之间的区别。
EnumMap
EnumMap是Map接口的一个专门实现,用于枚举类型。它实现了Map接口并扩展了Java中的AbstractMap。
- EnumMap比HashMap快得多。
- EnumMap类是Java集合框架的一个成员。
- EnumMap是一个有序的集合,按照其键的自然顺序进行维护。
- 每个EnumMap实例的所有键必须是相同枚举类型的键。
- EnumMap不允许插入空键,如果我们试图插入空键,它将抛出
NullPointerException
。 - EnumMap内部表示为数组以获得更好的性能。
下面是EnumMap的实现 –
// 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
EnumSet
EnumSet是Set接口的一个专门实现,用于枚举类型。它实现了Set接口并扩展了Java中的AbstractSet。
- EnumSet类是Java集合框架的一个成员,它不是同步的。
- EnumSet中的所有元素都必须来自一个枚举类型,这个枚举类型在创建集合时被明确或隐含地指定。
- EnumSet比HashSet快得多。
- EnumSet不允许插入空对象,如果我们试图插入空对象,它将抛出
NullPointerException
。
下面是EnumSet的实现:
// 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
EnumMap和EnumSet的区别
EnumMap | EnumSet |
---|---|
EnumMap是Map接口的一个专门实现,用于枚举类型。 | EnumSet是Set接口的一个专门实现,用于枚举类型。 |
EnumMap内部表示为一个数组。 | EnumSet内部表示为一个BitVector。 |
EnumMap不允许插入空键,但是可以插入空值。 | EnumSet不允许插入空元素。 |
EnumMap不是一个抽象的类。 | EnumSet是一个抽象类。 |
EnumMap不是一个抽象类,因此,我们可以创建这个类的实例。 | EnumSet是一个抽象类,因此,我们不能创建这个类的实例。 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/294725.html