Java EnumSet

Bu öğreticide, örnekler yardımıyla Java EnumSet sınıfı ve çeşitli yöntemleri hakkında bilgi edineceğiz.

EnumSetJava koleksiyonları çerçeve sınıfı tek enum elemanlarının bir dizi uygulamasını sağlar.

EnumSet hakkında bilgi edinmeden önce Java Enums hakkında bilgi sahibi olduğunuzdan emin olun.

Set arayüzünü uygular.

EnumSet oluşturma

Bir enum kümesi oluşturmak için önce java.util.EnumSetpaketi içe aktarmalıyız .

Diğer küme uygulamalarının aksine, enum kümesinin genel oluşturucuları yoktur. Bir enum kümesi oluşturmak için önceden tanımlanmış yöntemleri kullanmalıyız.

1. allOf (Boyut) kullanma

allof()Yöntem belirtilen enum tipi Boyutu bütün değerlerini içeren bir enum kümesi oluşturur. Örneğin,

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

Çıktı

 EnumSet: (KÜÇÜK, ORTA, BÜYÜK, EKSTRAJ) 

İfadeye dikkat edin,

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

Burada Size.class, oluşturduğumuz Boyut numaralandırmasını gösterir.

2. noneOf (Boyut) kullanma

noneOf()Yöntem boş enum kümesi oluşturur. Örneğin,

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

Çıktı

 Boş EnumSet: () 

Burada, boyutları adlı boş bir enum oluşturduk.

Not : Yukarıdaki programa yalnızca enum türü Size öğeleri ekleyebiliriz. Bunun nedeni, Boyut numaralandırmasını kullanarak boş enum kümemizi oluşturmamızdır.

3. Aralık (e1, e2) Yöntemini Kullanma

range()Yöntem, her iki değer de dahil olmak üzere, E1 ve E2 arasındaki bir enum değerlerini içeren bir numaralama kümesi oluşturur. Örneğin,

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

Çıktı

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. () Yönteminin Kullanılması

of()Yöntem belirtilen elemanları ihtiva eden bir enum kümesi oluşturur. Örneğin,

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

Çıktı

 EnumSet1: (MEDIUM) EnumSet2: (KÜÇÜK, BÜYÜK) 

EnumSet Yöntemleri

EnumSetSınıf bize enum sette çeşitli unsurları gerçekleştirmek için izin yöntemler sağlar.

EnumSet'e Eleman Ekle

  • add() - belirtilen enum değerlerini enum kümesine ekler
  • addAll() belirtilen koleksiyonun tüm öğelerini sete ekler

Örneğin,

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

Çıktı

 Add () kullanarak EnumSet: (ORTA) addAll () kullanarak EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Yukarıdaki örnekte, addAll()bir enum set size1'in tüm elemanlarını bir enum set size2'ye eklemek için yöntemi kullandık .

Bu gibi diğer koleksiyonlardan unsurları eklemek mümkündür ArrayList, LinkedListvb kullanarak bir enum setine addAll(). Ancak, tüm koleksiyonlar aynı enum türünde olmalıdır.

EnumSet Öğelerine Erişim

Bir enum setinin öğelerine erişmek için iterator()yöntemi kullanabiliriz . Bu yöntemi kullanmak için java.util.Iteratorpaketi içe aktarmalıyız . Örneğin,

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

Çıktı

 EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Not :

  • hasNext()trueenum kümesinde bir sonraki öğe varsa döndürür
  • next() enum kümesindeki sonraki öğeyi döndürür

EnumSet Öğelerini Kaldır

  • remove() - belirtilen öğeyi enum kümesinden kaldırır
  • removeAll() - enum kümesindeki tüm öğeleri kaldırır

Örneğin,

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

Çıktı

EnumSet: (KÜÇÜK, ORTA, BÜYÜK, EKSTRA) ORTA kaldırıldı mı? true Tüm öğeler kaldırıldı mı? doğru

Diğer yöntemler. Diğer metodlar

Yöntem Açıklama
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?

EnumSetDiğer grubu uygulamaları (gibi daha enum değerleri depolamak için etkili bir yöntem sağlar HashSet, TreeSet).

Bir enum kümesi yalnızca belirli bir numaralamanın enum değerlerini depolar. Bu nedenle JVM, kümenin tüm olası değerlerini zaten biliyor.

Numaralandırma kümelerinin dahili olarak bir bit dizisi olarak uygulanmasının nedeni budur. Bitler, elemanların enum setinde mevcut olup olmadığını belirtir.

İlgili elemanın biti, eğer bu eleman sette mevcutsa açılır.

Ilginç makaleler...