Heim  >  Artikel  >  Java  >  Eine kurze Diskussion über EnumSet von Java-Sammlungen

Eine kurze Diskussion über EnumSet von Java-Sammlungen

无忌哥哥
无忌哥哥Original
2018-07-19 10:51:391618Durchsuche


EnumSet

EnumSet ist eine Sammlungsklasse, die speziell für die Aufzählung entwickelt wurde. Alle Elemente in EnumSet müssen Aufzählungswerte des angegebenen Aufzählungstyps sein Der Aufzählungstyp wird beim Erstellen des EnumSets explizit oder implizit angegeben.

  1. Die Mengenelemente von EnumSet werden ebenfalls geordnet. EnumSet bestimmt die Reihenfolge der Mengenelemente basierend auf der Reihenfolge, in der die Aufzählungswerte innerhalb der Enum-Klasse definiert sind.

  2. EnumSet wird intern in Form von Bitvektoren gespeichert. Diese Speicherform ist sehr kompakt und effizient, sodass das EnumSet-Objekt sehr wenig Speicher belegt und sehr effizient läuft. Insbesondere bei der Durchführung von Batch-Vorgängen (z. B. Aufrufen der Methoden „ContainsAll ()“ und „RetainAll ()“ ist die Ausführungsgeschwindigkeit des Batch-Vorgangs ebenfalls sehr hoch, wenn es sich bei den Parametern auch um EnumSet-Sammlungen handelt.

  3. Die EnumSet-Klasse stellt keinen Konstruktor zum Erstellen von Instanzen dieser Klasse bereit, und das Programm sollte EnumSet-Objekte über die von ihm bereitgestellten Klassenmethoden erstellen.

  4. Die EnumSet-Sammlung erlaubt das Hinzufügen von Nullelementen nicht. Wenn Sie versuchen, ein Nullelement einzufügen, löst EnumSet eine NullPointerException-Ausnahme aus.

  5. Wenn Sie nur feststellen möchten, ob das EnumSet Nullelemente enthält, oder versuchen möchten, Nullelemente zu löschen, wird keine Ausnahme ausgelöst. Der Löschvorgang gibt lediglich „false“ zurück, da keine Nullelemente gelöscht werden .

Methodeneinführung:

  • EnumSet allOf(Class elementType): Erstellen Sie ein Array mit die angegebene EnumSet-Sammlung aller Aufzählungswerte in der Aufzählungsklasse.

  • EnumSet complementOf(EnumSet e): Erstellen Sie einen EnumSet-Satz, dessen Elementtyp mit dem Elementtyp im angegebenen EnumSet übereinstimmt. Der neue EnumSet-Satz enthält die Der ursprüngliche EnumSet-Satz enthält die verbleibenden Aufzählungswerte dieser Art von Aufzählungsklasse (d. h. die Summe der Sammlungselemente der neuen EnumSet-Sammlung und der ursprünglichen EnumSet-Sammlung sind alle Aufzählungswerte der Aufzählungsklasse).

  • EnumSet copyOf(Collection c): Verwenden Sie eine normale Sammlung, um eine EnumSet-Sammlung zu erstellen.

  • EnumSet copyOf(EnumSet e): Erstellen Sie eine EnumSet-Sammlung mit demselben Elementtyp und denselben Sammlungselementen des angegebenen EnumSet.

  • EnumSet noneOf(Class elementType): Erstellen Sie ein leeres EnumSet, dessen Elementtyp der angegebene Aufzählungstyp ist.

  • EnumSet of(E first,E…rest): Erstellen Sie eine EnumSet-Sammlung, die einen oder mehrere Aufzählungswerte enthält, und übergeben Sie mehrere Aufzählungswerte, zu denen die Werte gehören müssen die gleiche Aufzählungsklasse.

  • EnumSet-Bereich (E von,E bis): Erstellen Sie ein EnumSet, das alle Aufzählungswerte im Bereich vom Aufzählungswert von bis zum Aufzählungswert bis enthält . .

    Elemente, um eine neue EnumSet-Sammlung zu erstellen, oder kopieren Sie alle Elemente aus einer anderen Sammlung, um eine neue EnumSet-Sammlung zu erstellen.
Beispiel:

package com.collection;

import java.util.EnumSet;

public class EnumSetTest {

    public static void main(String[] args) {
        //1.创建一个包含Session(枚举类)里所有枚举值的EnumSet集合
        EnumSet e1 = EnumSet.allOf(Session.class);
        System.out.println(e1);//[SPRING, SUMMER, FAIL, WINTER]

        //2.创建一个空EnumSet
        EnumSet e2 = EnumSet.noneOf(Session.class);
        System.out.println(e2);//[]

        //3. add()空EnumSet集合中添加枚举元素
        e2.add(Session.SPRING);
        e2.add(Session.SUMMER);
        System.out.println(e2);//[SPRING, SUMMER]

        //4. 以指定枚举值创建EnumSet集合
        EnumSet e3 = EnumSet.of(Session.SPRING,Session.FAIL);
        System.out.println(e3);//[SPRING, FAIL]

        //5.创建一个包含从from枚举值到to枚举值范围内所有枚举值的EnumSet集合。
        EnumSet e4 = EnumSet.range(Session.SPRING,Session.FAIL);
        System.out.println(e4);//[SPRING, SUMMER, FAIL]

        //6.创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,
        //  新EnumSet集合包含原EnumSet集合所不包含的枚举值
        EnumSet e5 = EnumSet.complementOf(e4);
        System.out.println(e5);//[WINTER]
    }
}

//创建一个枚举
enum Session{
    SPRING,
    SUMMER,
    FAIL,
    WINTER
}

Hinweis: Wenn Sie alle Elemente in der Sammlung kopieren, um ein neues EnumSet zu erstellen, müssen alle Elemente in der Sammlung denselben Aufzählungswert haben Aufzählungsklasse.

Fehlerbeispiel:

Collection c = new HashSet();
        c.clear();
        c.add(Session.SPRING);
        c.add(Session.FAIL);
        EnumSet e6 = EnumSet.copyOf(c);
        System.out.println(e6);//[SPRING, FAIL]

Gewonnene Dinge sind getan; die Seele der Freude liegt im Tun.

Erlangen ist Vollendung, die Essenz des Glücks liegt im Prozess.

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über EnumSet von Java-Sammlungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn