Java中EnumMap和EnumSet的区别

  • A+
所属分类:其他教程
摘要

文章目录[隐藏] EnumMap和EnumSet都是定义在java集合中的类。在这篇文章中,我们将了解EnumMap和EnumSet的区别。EnumMap是Map接口的专门实现,EnumSet是Set接口的专门实现。它们之间存在着一些差异。所以我们下面来看看EnumMap和EnumSet之间的区别。

文章目录[隐藏]

  • EnumMap
  • EnumSet

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是一个抽象类,因此,我们不能创建这个类的实例。
  • 我的微信公众号
  • 扫一扫关注
  • weinxin
  • 我的新浪微博号
  • 扫一扫关注
  • weinxin
小辉博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: