Java EnumMap和EnumSet的区别

Java EnumMap和EnumSet的区别

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 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是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是一个抽象类,因此,我们不能创建这个类的实例。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程