Java EnumSet

I denna handledning lär vi oss om Java EnumSet-klassen och dess olika metoder med hjälp av exempel.

Den EnumSetklass av samlingar ramverket Java ger en uppsättning genomförande av delar av en enda enum.

Innan du lär dig om EnumSet, se till att känna till Java Enums.

Den implementerar Set-gränssnittet.

Skapa EnumSet

För att skapa en enum-uppsättning måste vi först importera java.util.EnumSetpaketet.

Till skillnad från andra setimplementeringar har enumset inte offentliga konstruktörer. Vi måste använda de fördefinierade metoderna för att skapa en enum-uppsättning.

1. Använda allOf (storlek)

Den allof()metod skapar en enum set som innehåller alla värden för den angivna enum typ storlek. Till exempel,

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

Produktion

 EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Lägg märke till uttalandet,

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

Här betecknar Size.class den storlek som vi har skapat.

2. Använda noneOf (storlek)

Den noneOf()metod skapar en tom enum uppsättning. Till exempel,

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

Produktion

 Tom EnumSet: () 

Här har vi skapat ett tomt namn som heter storlekar.

Obs! Vi kan bara infoga element av enumtyp Storlek i ovanstående program. Det beror på att vi skapade vår tomma enumuppsättning med Size enum.

3. Använda intervall (e1, e2) Metod

Den range()metod skapar en enum uppsättning som innehåller alla värden av en enum mellan e1 och e2 inklusive båda värdena. Till exempel,

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

Produktion

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. Användning av () -metoden

Den of()metod skapar en enum uppsättning som innehåller de angivna elementen. Till exempel,

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

Produktion

 EnumSet1: (MEDIUM) EnumSet2: (LITT, STOR) 

Metoder för EnumSet

I EnumSetklassen innehåller metoder som tillåter oss att utföra olika element på enum set.

Infoga element till EnumSet

  • add() - infogar angivna enumvärden i enumuppsättningen
  • addAll() infogar alla element i den angivna samlingen i uppsättningen

Till exempel,

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

Produktion

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

I exemplet ovan har vi använt addAll()metoden för att infoga alla element i enumuppsättningsstorlekar1 till enuppsättningsstorlekar2.

Det är också möjligt att sätta in element från andra samlingar såsom ArrayList, LinkedListetc. till en enum som ställts in med addAll(). Alla samlingar bör dock vara av samma enumtyp.

Åtkomst till EnumSet-element

För att komma åt element i enumuppsättning kan vi använda iterator()metoden. För att kunna använda den här metoden måste vi importera java.util.Iteratorpaketet. Till exempel,

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

Produktion

 EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Obs :

  • hasNext()returnerar trueom det finns ett nästa element i enumuppsättningen
  • next() returnerar nästa element i enumuppsättningen

Ta bort EnumSet Elements

  • remove() - tar bort det angivna elementet från enum-uppsättningen
  • removeAll() - tar bort alla element från enumset

Till exempel,

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

Produktion

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) Är MEDIUM borttagen? true Är alla element borttagna? Sann

Andra metoder

Metod Beskrivning
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?

Det EnumSetger ett effektivt sätt att lagra enumvärden än andra setimplementeringar (som HashSet, TreeSet).

En enum-uppsättning lagrar endast enumvärden för ett specifikt enum. Därför vet JVM redan alla möjliga värden för uppsättningen.

Detta är anledningen till att enum-uppsättningar implementeras internt som en sekvens av bitar. Bits anger om element finns i enum-uppsättningen eller inte.

Bit av ett motsvarande element är påslaget om det finns i uppsättningen.

Intressanta artiklar...