Java EnumSet

W tym samouczku za pomocą przykładów nauczymy się o klasie Java EnumSet i jej różnych metodach.

EnumSetKlasa zbiorów ramach Java zapewnia zestaw realizację elementów pojedynczego wyliczenia.

Zanim dowiesz się o EnumSet, upewnij się, że znasz Java Enums.

Implementuje interfejs Set.

Tworzenie EnumSet

Aby utworzyć zestaw wyliczeń, musimy najpierw zaimportować java.util.EnumSetpakiet.

W przeciwieństwie do innych implementacji zestawów zestaw wyliczeniowy nie ma konstruktorów publicznych. Aby utworzyć zestaw wyliczeń, musimy użyć predefiniowanych metod.

1. Korzystanie z allOf (rozmiar)

allof()Metoda tworzy zestaw enum, który zawiera wszystkie wartości określonego typu enum Size. Na przykład,

 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); ) ) 

Wynik

 EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Zwróć uwagę na oświadczenie,

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

Tutaj Size.class oznacza wyliczenie rozmiaru, które utworzyliśmy.

2. Używanie noneOf (rozmiar)

noneOf()Metoda tworzy zbiór pusty enum. Na przykład,

 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); ) ) 

Wynik

 Pusty zestaw EnumSet: () 

Tutaj utworzyliśmy puste wyliczenie o nazwie rozmiary.

Uwaga : W powyższym programie możemy wstawiać tylko elementy typu wyliczeniowego Size. Dzieje się tak, ponieważ utworzyliśmy nasz pusty zestaw wyliczeń przy użyciu wyliczenia rozmiaru.

3. Korzystanie z metody zakresu (e1, e2)

range()Metoda tworzy zestaw enum zawierający wszystkie wartości wyliczenia pomiędzy E1 i E2 w tym zarówno wartości. Na przykład,

 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); ) ) 

Wynik

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. Korzystanie z metody ()

of()Sposób tworzy zestaw enum zawierającej określone elementy. Na przykład,

 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); ) ) 

Wynik

 EnumSet1: (MEDIUM) EnumSet2: (MAŁY, DUŻY) 

Metody EnumSet

EnumSetKlasa udostępnia metody, które pozwalają nam na wykonywanie różnych elementów na planie enum.

Wstaw elementy do EnumSet

  • add() - wstawia określone wartości wyliczenia do zestawu wyliczeń
  • addAll() wstawia wszystkie elementy określonej kolekcji do zestawu

Na przykład,

 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); ) ) 

Wynik

 EnumSet using add (): (MEDIUM) EnumSet using addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

W powyższym przykładzie użyliśmy addAll()metody, aby wstawić wszystkie elementy zestawu wyliczeniowego size1 do zestawu wyliczeniowego size2.

Możliwe jest również, aby wstawić elementy z innych kolekcji, takich jak ArrayList, LinkedListitp do zestawu przy użyciu enum addAll(). Jednak wszystkie kolekcje powinny mieć ten sam typ wyliczenia.

Uzyskaj dostęp do elementów EnumSet

Aby uzyskać dostęp do elementów zestawu wyliczeniowego, możemy użyć iterator()metody. Aby skorzystać z tej metody, musimy zaimportować java.util.Iteratorpakiet. Na przykład,

 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(", "); ) ) ) 

Wynik

 EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Uwaga :

  • hasNext()zwraca, truejeśli w zestawie wyliczeń jest następny element
  • next() zwraca następny element w zestawie wyliczeń

Usuń elementy EnumSet

  • remove() - usuwa określony element z zestawu wyliczeń
  • removeAll() - usuwa wszystkie elementy z zestawu wyliczeń

Na przykład,

 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); ) ) 

Wynik

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) Czy MEDIUM jest usuwane? true Czy wszystkie elementy zostały usunięte? prawdziwe

Inne metody

metoda Opis
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?

EnumSetZapewnia skuteczny sposób na przechowywanie wartości enum niż inne implementacje Set (jak HashSet, TreeSet).

Zestaw wyliczeń przechowuje tylko wartości wyliczenia określonego wyliczenia. W związku z tym JVM zna już wszystkie możliwe wartości zbioru.

To jest powód, dla którego zestawy wyliczeniowe są wewnętrznie implementowane jako sekwencja bitów. Bity określają, czy elementy są obecne w zestawie wyliczeń, czy nie.

Bit odpowiedniego elementu jest włączony, jeśli ten element jest obecny w zestawie.

Interesujące artykuły...