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 bạn tìm hiểu về EnumSet, hãy chắc chắn rằng 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 (Kích thước)

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<Size> sizes = EnumSet.allOf(Size.class);

        System.out.println("EnumSet: " + sizes);
    }

}

Đầu ra

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]

Lưu ý tuyên bố,

EnumSet<Size> 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<Size> sizes = EnumSet.noneOf(Size.class);

        System.out.println("Empty EnumSet: " + sizes);
    }
}

Đầu ra

Empty EnumSet : []

Ở đâ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 tập hợp 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<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);

        System.out.println("EnumSet: " + sizes);
    }
}

Đầu ra

EnumSet: [MEDIUM, LARGE, EXTRALARGE]

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<Size> sizes1 = EnumSet.of(Size.MEDIUM);
        System.out.println("EnumSet1: " + sizes1);

        EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
        System.out.println("EnumSet2: " + sizes2);
    }
}

Đầu ra

EnumSet1: [MEDIUM]
EnumSet2: [SMALL, LARGE]

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() – inserts specified enum values to the enum set
  • addAll() inserts all the elements of the specified collection to the set

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<Size> sizes1 = EnumSet.allOf(Size.class);

        // Creating an EnumSet using noneOf()
        EnumSet<Size> 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 using add(): [MEDIUM]
EnumSet using 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ư ArrayListLinkedList, 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<Size> sizes = EnumSet.allOf(Size.class);

        Iterator<Size> iterate = sizes.iterator();

        System.out.print("EnumSet: ");
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Đầu ra

EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,

Ghi chú :

  • hasNext() returns true if there is a next element in the enum set
  • next() returns the next element in the enum set

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

  • remove() – removes the specified element from the enum set
  • removeAll() – removes all the elements from the enum set

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<Size> 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]
Is MEDIUM removed? true
Are all elements removed? true

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

MethodDecfscription
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

Giao diện có thể sao chép và nối tiếp hóa

Các EnumSetlớp cũng cụ Cloneablevà Serializablegiao diện.

Giao diện nhân bản

Nó cho phép EnumSetlớp tạo một bản sao của các thể hiện của lớp.

Giao diện có thể nối tiếp hóa

Bất cứ khi nào các đối tượng Java cần được truyền qua mạng, các đối tượng cần được chuyển đổi thành các bit hoặc byte. Điều này là do các đối tượng Java không thể được truyền qua mạng.

Các Serializablegiao diện cho phép các lớp học để được đăng. Điều này có nghĩa là các đối tượng của các lớp thực thi Serializablecó thể được chuyển đổi thành bit hoặc byte.

Tại sao sử dụng 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ư HashSetTreeSet).

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.









Gõ tìm kiếm nhanh...