English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы изучим Java EnumSet класс и его различные методы с помощью примеров.
Класс EnumSet в Java Collection Framework предоставляет реализацию множества элементов одного枚举.
Прежде чем изучать EnumSet, убедитесь, что вы понимаетеJava Enums.
Он реализуетИнтерфейс Set.
Для создания множества枚руг мы должны сначала импортировать пакет java.util.EnumSet.
В отличие от других реализаций множеств, множества枚举 не имеют общих конструкторов. Мы должны использовать предопределенные методы для создания множества.
Метод allOf() создает множество枚举, содержащее все значения указанного типа Size. Например:
import java.util.EnumSet; class Main { //Множество Size enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование allOf() для создания EnumSet EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); } }
Результат вывода
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Внимание на声明
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Здесь Size.class указывает на созданный нами набор Size.
Метод noneOf() создает пустой множество枚举. Например:
import java.util.EnumSet; class Main { //Множество Size enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование метода noneOf() для создания EnumSet EnumSet<Size> sizes = EnumSet.noneOf(Size.class); System.out.println("Пустой EnumSet: " + sizes); } }
Результат вывода
Пустой EnumSet: []
Здесь мы создали пустой множественный набор с именем sizes.
ВниманиеМы можем вставить элементы только типа Size. Это связано с тем, что мы создали пустой множественный набор с использованием типа Size枚举.
Метод range() создает множество枚举, содержащее все значения между e1 и e2, включая эти значения. Например:
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование метода range() для создания EnumSet EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); } }
Результат вывода
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
Метод of() создает множество枚举, содержащее указанные элементы. Например:
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование метода of() с одним параметром 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); } }
Результат вывода
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
Класс EnumSet предоставляет несколько методов, которые позволяют нам выполнять различные операции с элементами EnumSet.
add() - Вставка указанного значения枚рузии в набор
addAll() - Вставка всех элементов из指定енного набора в набор
Например,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование allOf() для создания EnumSet EnumSet<Size> sizes1 = EnumSet.allOf(Size.class); //Использование noneOf() для создания EnumSet EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class); //Использование метода add для добавления элемента sizes2.add(Size.MEDIUM); System.out.println("EnumSet использует метод add(): " + sizes2); //Использование метода addAll() sizes2.addAll(sizes1); System.out.println("EnumSet использует метод addAll(): " + sizes2); } }
Результат вывода
EnumSet использует метод add(): [MEDIUM] EnumSet использует метод addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
В примере выше мы использовали метод addAll() для вставки всех элементов из EnumSet sizes1 в EnumSet sizes2.
Мы также можем использовать метод addAll() для вставки элементов из других集合 (например, ArrayList, LinkedList и т.д.) в EnumSet. Однако, все集合 должны иметь одинаковый тип枚рузии.
Чтобы访问 элементы EnumSet, мы можем использовать метод iterator(). Для использования этого метода我们必须 импортировать пакет java.util.Iterator. Например,
import java.util.EnumSet; import java.util.Iterator; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование allOf() для создания EnumSet 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(", "); } } }
Результат вывода
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Внимание:
hasNext() - Возвращает true, если в集合е枚ераций есть следующий элемент
next() - Возврат следующего элемента из集合а枚ераций
remove() - Удаление указанного элемента из集合а枚ераций
removeAll() - Удаление всех элементов из集合а枚ераций
Например,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Использование allOf() для создания EnumSet EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); // Использование remove() boolean value1 = sizes.remove(Size.MEDIUM); System.out.println("Удален ли MEDIUM? " + value1); // Использование removeAll() boolean value2 = sizes.removeAll(sizes); System.out.println("Удалили все элементы? " + value2); } }
Результат вывода
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] Удален ли MEDIUM? true Удалили все элементы? true
Метод | Описание |
---|---|
copyOf() | Создание дубликата EnumSet |
contains() | Поиск указанного элемента EnumSet в среде и возврат логического результата |
isEmpty() | Проверка, пуст ли EnumSet |
size() | Возврат размера EnumSet |
clear() | Удалить все элементы из EnumSet |
Класс EnumSet также реализует интерфейсы Cloneable и Serializable.
Интерфейс клонирования (Cloneable)
Это позволяет классу EnumSet создавать копию экземпляра этого класса.
Интерфейс сериализуемый (Serializable)
Каждый раз, когда нужно передавать Java объект через сеть, необходимо преобразовать объект в биты или байты. Это потому, что Java объекты не могут передаваться через сеть.
Интерфейс Serializable позволяет классу быть сериализованным. Это означает, что Serializable может преобразовать объект класса, реализующего этот класс, в биты или байты.
Множество энумов предоставляет более эффективный способ хранения значений энумов, чем другие реализации множеств (например, HashSet, TreeSet).
Множество энумов хранит только значения энумов для определенного энума. Таким образом, JVM уже знает все возможные значения этого набора.
Вот почему множество энумов внутренне реализовано как битовая последовательность. Биты указывают, появляется ли элемент в множестве энумов.
Если в集合е есть этот элемент, то открывается соответствующий бит.