Java EnumSet

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java EnumSet và các phương thức khác nhau của nó với sự trợ giúp của các ví dụ.

Các EnumSetlớp học của khuôn khổ bộ sưu tập Java cung cấp một thực tập các yếu tố của một enum duy nhất.

Trước khi tìm hiểu về EnumSet, hãy đảm bảo bạn đã biết về Java Enums.

Nó thực hiện giao diện Đặt.

Tạo EnumSet

Để tạo một tập hợp enum, java.util.EnumSettrước tiên chúng ta phải nhập gói.

Không giống như các triển khai tập hợp khác, tập hợp enum không có các hàm tạo công khai. Chúng ta phải sử dụng các phương thức được xác định trước để tạo một tập hợp enum.

1. Sử dụng allOf (Size)

Các allof()phương pháp tạo ra một bộ enum có chứa tất cả các giá trị của các quy định kiểu enum Kích. Ví dụ,

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

Đầu ra

 EnumSet: (NHỎ, TRUNG BÌNH, LỚN, CỰC KỲ) 

Lưu ý tuyên bố,

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

Ở đây, Size.class biểu thị kích thước enum mà chúng ta đã tạo.

2. Sử dụng noneOf (Kích thước)

Các noneOf()phương pháp tạo ra một bộ enum trống. Ví dụ,

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

Đầu ra

 EnumSet trống: () 

Ở đây, chúng tôi đã tạo một enum trống có tên là các kích thước.

Lưu ý : Chúng ta chỉ có thể chèn các phần tử có kiểu enum Size trong chương trình trên. Đó là bởi vì chúng tôi đã tạo bộ enum trống của mình bằng cách sử dụng Size enum.

3. Sử dụng phương pháp range (e1, e2)

Các range()phương pháp tạo ra một bộ enum chứa tất cả các giá trị của một enum giữa e1 và e2 bao gồm cả giá trị. Ví dụ,

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

Đầu ra

 EnumSet: (TRUNG BÌNH, LỚN, CỰC KỲ) 

4. Sử dụng phương thức ()

Các of()phương pháp tạo ra một bộ enum có chứa các yếu tố quy định. Ví dụ,

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

Đầu ra

 EnumSet1: (TRUNG BÌNH) EnumSet2: (NHỎ, LỚN) 

Phương thức của EnumSet

Các EnumSetlớp học cung cấp phương pháp đó cho phép chúng tôi thực hiện các yếu tố khác nhau trên các thiết lập enum.

Chèn các phần tử vào EnumSet

  • add() - chèn các giá trị enum đã chỉ định vào tập hợp enum
  • addAll() chèn tất cả các phần tử của tập hợp đã chỉ định vào tập hợp

Ví dụ,

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

Đầu ra

 EnumSet sử dụng add (): (MEDIUM) EnumSet sử dụng addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Trong ví dụ trên, chúng ta đã sử dụng addAll()phương thức để chèn tất cả các phần tử của một tập hợp kích thước enum1 vào một tập hợp kích thước enum2.

Nó cũng có thể chèn các yếu tố từ các bộ sưu tập khác như ArrayList, LinkedList, vv để một bộ enum sử dụng addAll(). Tuy nhiên, tất cả các bộ sưu tập phải có cùng kiểu enum.

Truy cập các phần tử EnumSet

Để truy cập các phần tử của một tập hợp enum, chúng ta có thể sử dụng iterator()phương thức. Để sử dụng phương pháp này, chúng ta phải nhập java.util.Iteratorgói. Ví dụ,

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

Đầu ra

 EnumSet: NHỎ, TRUNG BÌNH, LỚN, CỰC KỲ, 

Ghi chú :

  • hasNext()trả về truenếu có một phần tử tiếp theo trong tập hợp enum
  • next() trả về phần tử tiếp theo trong tập hợp enum

Loại bỏ các phần tử EnumSet

  • remove() - loại bỏ phần tử được chỉ định khỏi tập hợp enum
  • removeAll() - loại bỏ tất cả các phần tử khỏi tập hợp enum

Ví dụ,

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

Đầu ra

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) MEDIUM có bị loại bỏ không? true Tất cả các phần tử có bị loại bỏ không? thật

Các phương pháp khác

phương pháp Sự miêu tả
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?

Các EnumSetcung cấp một cách hiệu quả để lưu trữ các giá trị enum hơn việc triển khai bộ khác (như HashSet, TreeSet).

Một tập hợp enum chỉ lưu trữ các giá trị enum của một enum cụ thể. Do đó, JVM đã biết tất cả các giá trị có thể có của tập hợp.

Đây là lý do tại sao các tập hợp enum được thực hiện bên trong như một chuỗi các bit. Bit chỉ định xem các phần tử có trong tập hợp enum hay không.

Bit của một phần tử tương ứng được bật nếu phần tử đó có mặt trong tập hợp.

thú vị bài viết...