È possibile utilizzare un EnumSet pure. Ciò consente di utilizzare i bit denominati e può essere più amichevole rispetto all'utilizzo di BitSet che utilizza bit indicizzati.
Un'implementazione Set specializzata da utilizzare con tipi di enumerazione. Tutti gli elementi di un enum set devono provenire da un singolo tipo di enum che viene specificato, esplicitamente o implicitamente, quando viene creato l'insieme. I set Enum sono rappresentati internamente come bit vettori. Questa rappresentazione è estremamente compatta ed efficiente. Le prestazioni di spazio e tempo di questa classe dovrebbero essere abbastanza buone da permetterne l'uso come un'alternativa di alta qualità e tipicamente valida ai "bit flag" tradizionali basati su int. Anche le operazioni bulk (come contiene All e retainAll) dovrebbero essere eseguite molto rapidamente se il loro argomento è anche un enum set.
ad es.
BitSet bs = new BitSet(4);
bs.set(1); // READY
bs.set(3); // LARGE_FLAG
boolean largeFlag = bs.get(1); // LARGE_FLAG
System.out.println("Using BitSet: "+bs);
EnumSet<Settings> settings = EnumSet.noneOf(Settings.class);
settings.add(Settings.READY);
settings.add(Settings.LARGE_FLAG);
boolean largeFlag2 = settings.contains(Settings.LARGE_FLAG);
System.out.println("Using EnumSet: "+settings);
stampe
Using BitSet: {1, 3}
Using EnumSet: [READY, LARGE_FLAG]
IMHO EnumSet è molto più chiara se appropriato.
fonte
2012-01-13 09:10:38
[java.util.BitSet] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html)? O mi sta sfuggendo qualcosa? – Mysticial
Accidenti ... dovrei smettere di esitare e postare queste come risposte ... – Mysticial
@Mysticial: essere un po 'più esitante nell'esitare. ;) – Mehrdad