Puede utilizar un EnumSet también. Esto le permite usar bits con nombre y puede ser más amigable que usar BitSet que usa bits indexados.
Una implementación de conjunto especializado para usar con tipos enum. Todos los elementos en un conjunto enum deben provenir de un solo tipo de enumeración que se especifica, explícita o implícitamente, cuando se crea el conjunto. Los conjuntos Enum están representados internamente como vectores de bits. Esta representación es extremadamente compacta y eficiente. El rendimiento de espacio y tiempo de esta clase debería ser lo suficientemente bueno como para permitir su uso como una alternativa de alta calidad y segura para tipos de "indicadores de bits" tradicionales basados en int. Incluso las operaciones masivas (como containsAll y retainAll) deberían ejecutarse muy rápidamente si su argumento también es un conjunto de enumeración.
e.g.
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);
impresiones
Using BitSet: {1, 3}
Using EnumSet: [READY, LARGE_FLAG]
mi humilde opinión EnumSet es mucho más claro si es apropiado.
[java.util.BitSet] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html)? ¿O me estoy perdiendo algo? – Mysticial
Caray ... Debo dejar de dudar y publicar esto como respuestas ... – Mysticial
@Mysticial: Sé un poco más vacilante en dudar. ;) – Mehrdad