The Answer (EnumSet
) Amit Deshpande i the Answer (.values
) Marko Topolnik są zarówno poprawne. Oto trochę więcej informacji.
Sposób .values()
jest niejawnie zadeklarowana metoda na Enum
, dodane przez kompilator. Generuje raczej surowy układ niż Collection
. Z pewnością użyteczny.
Specjalna uwaga o dokumentacji: Będąc niezwykły jako niejawnie zadeklarowanej metody metoda .values()
jest nie wymienione wśród metod w klasie Enum
. Metoda jest defined in the Java Language Specification i jest wymieniona w dokumencie dla Enum.valueOf
.
Szybko & Małe
upsides do EnumSet
obejmują:
- Ekstremalne prędkości.
- Kompaktowe wykorzystanie pamięci.
Przytoczyć klasę DOC
zestawy Enum reprezentowane są wewnętrznie jako bitowych wektorów. Ta reprezentacja jest niezwykle kompaktowa i wydajna. Wydajność w czasie i przestrzeni tej klasy powinna być wystarczająco dobra, aby umożliwić jej użycie jako wysokiej jakości, bezpiecznej dla zdrowia alternatywy dla tradycyjnych "bitowych flag"."Operacje Nawet masowych (takich jak containsAll i retainAll) powinny działać bardzo szybko, jeśli ich argumentem jest również zestaw enum
Biorąc pod uwagę ten ENUM:..
enum Animal
{
DOG , CAT , BIRD , BAT ;
}
Złóż EnumSet
w jednej linii
EnumSet<Animal> allAnimals = EnumSet.allOf(Animal.class);
Dump pocieszyć.
System.out.println("allAnimals : " + allAnimals);
allAnimals [psa, kota, ptaka, BAT]
stanowią pary z podzbiór obiektów typu wyliczeniowego.
EnumSet<Animal> flyingAnimals = EnumSet.of(BIRD , BAT);
Spójrz na the class doc zobaczyć wiele sposobów manipulowania kolekcję tym dodawanie lub usuwanie elementów.
EnumSet<Animal> featheredFlyingAnimals =
EnumSet.copyOf(flyingAnimals).remove(BAT);
Natural Order
Doc obiecuje iterator EnumSet jest w naturalny porządek, kolejność, w jakiej wartości wyliczenia były pierwotnie zadeklarowane.
Cytując klasy Doc:
Iterator zwrócony przez metody iteracyjnej przemierza elementy w ich naturalnym porządku (kolejności, w jakiej zostały zgłoszone stałe enum).
Szczerze mówiąc, biorąc pod uwagę tę obietnicę, jestem zdezorientowany, dlaczego to nie jest SortedSet
. Ale, no cóż, wystarczająco dobrze. W razie potrzeby możemy utworzyć List
z Set
. Przekaż dowolny Collection
do konstruktora z ArrayList
, a kolekcja Iterator
zostanie automatycznie wywołana w Twoim imieniu.
List<Animal> list = new ArrayList<>(allAnimals);
Zrzut na konsolę.
System.out.println("list : " + list);
Po uruchomieniu.
list : [DOG, CAT, BIRD, BAT]
Powoduje to wyświetlenie pustej listy. –
@BasilBourque To zależy od interpretacji pytania. Zrobiłem edycję wyjaśniającą. – arshajii