В този урок ще научим за класа 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 указва дали елементите присъстват в набора за изброяване или не.
Битът на съответния елемент се включва, ако този елемент присъства в набора.