Java EnumSet

В този урок ще научим за класа Java EnumSet и различните му методи с помощта на примери.

В EnumSetкласа на колекции рамките на Java предоставя набор изпълнение на елементи от един-единствен ENUM.

Преди да научите за EnumSet, не забравяйте да знаете за Java Enums.

Той реализира интерфейса Set.

Създаване на EnumSet

За да създадем набор от изброяване, първо трябва да импортираме java.util.EnumSetпакета.

За разлика от други изпълнения на множества, наборът enum няма публични конструктори. Трябва да използваме предварително дефинираните методи, за да създадем набор от изброяване.

1. Използване на allOf (Размер)

В allof()метода създава набор ENUM, който съдържа всички стойности на определения тип ENUM размер. Например,

 import java.util.EnumSet; class Main ( // an enum named Size enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); ) ) 

Изход

 EnumSet: (МАЛКИ, СРЕДНИ, ГОЛЯМИ, ИЗКЛЮЧИТЕЛНИ) 

Забележете изявлението,

 EnumSet sizes = EnumSet.allOf(Size.class); 

Тук Size.class обозначава Size enum, който сме създали.

2. Използване на noneOf (Размер)

В noneOf()метода създава празен набор ENUM. Например,

 import java.util.EnumSet; class Main ( // an enum type Size enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using noneOf() EnumSet sizes = EnumSet.noneOf(Size.class); System.out.println("Empty EnumSet: " + sizes); ) ) 

Изход

 Празен EnumSet: () 

Тук създадохме празно изброяване с имена с размери.

Забележка : В горната програма можем да вмъкваме само елементи от тип enum Size. Това е така, защото ние създадохме нашия празен набор от преброяване, използвайки Size enum.

3. Използване на метод за обхват (e1, e2)

В range()метода създава ENUM комплект, съдържащ всички стойности на един ENUM между Е1 и Е2, включително и двете стойности. Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using range() EnumSet sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); ) ) 

Изход

 EnumSet: (СРЕДЕН, ГОЛЯМ, ИЗКЛЮЧИТЕЛЕН) 

4. Използване на метода ()

В of()метода създава ENUM комплект, съдържащ посочените елементи. Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Using of() with a single parameter EnumSet sizes1 = EnumSet.of(Size.MEDIUM); System.out.println("EnumSet1: " + sizes1); EnumSet sizes2 = EnumSet.of(Size.SMALL, Size.LARGE); System.out.println("EnumSet2: " + sizes2); ) ) 

Изход

 EnumSet1: (СРЕДЕН) EnumSet2: (МАЛЪК, ГОЛЯМ) 

Методи на EnumSet

Най- EnumSetкласа предлага методи, които ни позволяват да изпълняват различни елементи на снимачната площадка ENUM.

Вмъкване на елементи в EnumSet

  • add() - вмъква посочени стойности на изброяването в набора от изброявания
  • addAll() вмъква всички елементи от посочената колекция в набора

Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes1 = EnumSet.allOf(Size.class); // Creating an EnumSet using noneOf() EnumSet sizes2 = EnumSet.noneOf(Size.class); // Using add method sizes2.add(Size.MEDIUM); System.out.println("EnumSet Using add(): " + sizes2); // Using addAll() method sizes2.addAll(sizes1); System.out.println("EnumSet Using addAll(): " + sizes2); ) ) 

Изход

 EnumSet, използвайки add (): (MEDIUM) EnumSet, използвайки addAll (): (SMALL, MEDIUM, GARGE, EXTRALARGE) 

В горния пример използвахме addAll()метода, за да вмъкнем всички елементи на enum set sizes1 в enum set sizes2.

Възможно е също така да се вмъкнат елементи от други колекции като ArrayList, LinkedListи т.н. в набор от изброявания с помощта addAll(). Всички колекции обаче трябва да са от един и същ тип преброяване.

Достъп до EnumSet Elements

За достъп до елементи от набор от изброяване можем да използваме iterator()метода. За да използваме този метод, трябва да импортираме java.util.Iteratorпакета. Например,

 import java.util.EnumSet; import java.util.Iterator; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); Iterator iterate = sizes.iterator(); System.out.print("EnumSet: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Изход

 EnumSet: МАЛКИ, СРЕДНИ, ГОЛЯМИ, ИЗКЛЮЧИТЕЛНИ, 

Забележка :

  • hasNext()връща, trueако има следващ елемент в набора от изброяване
  • next() връща следващия елемент в набора от изброяване

Премахнете елементите на EnumSet

  • remove() - премахва посочения елемент от набора за изброяване
  • removeAll() - премахва всички елементи от набора за изброяване

Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); // Using remove() boolean value1 = sizes.remove(Size.MEDIUM); System.out.println("Is MEDIUM removed? " + value1); // Using removeAll() boolean value2 = sizes.removeAll(sizes); System.out.println("Are all elements removed? " + value2); ) ) 

Изход

EnumSet: (МАЛКИ, СРЕДНИ, ГОЛЕМИ, ИЗКЛЮЧИТЕЛНИ) Премахва ли се СРЕДНИЯТ? true Всички елементи ли са премахнати? вярно

Други методи

Метод Описание
copyOf() Creates a copy of the EnumSet
contains() Searches the EnumSet for the specified element and returns a boolean result
isEmpty() Checks if the EnumSet is empty
size() Returns the size of the EnumSet
clear() Removes all the elements from the EnumSet

Clonable and Serializable Interfaces

The EnumSet class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumSet class to make a copy of instances of the class.

Serializable Interface

Whenever Java objects need to be transmitted over a network, objects need to be converted into bits or bytes. This is because Java objects cannot be transmitted over the network.

The Serializable interface allows classes to be serialized. This means objects of the classes implementing Serializable can be converted into bits or bytes.

Why EnumSet?

Предоставя EnumSetефективен начин за съхраняване на стойности на изброяване от други изпълнения на набор (като HashSet, TreeSet).

Наборът на изброяване съхранява само стойности на преброяване на конкретен изброяване. Следователно JVM вече знае всички възможни стойности на набора.

Това е причината, поради която наборите от изброяване се изпълняват вътрешно като последователност от битове. Bits указва дали елементите присъстват в набора за изброяване или не.

Битът на съответния елемент се включва, ако този елемент присъства в набора.

Интересни статии...