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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。