Java: la clase BitSet
La clase BitSet crea un tipo especial de matriz que contiene valores de bits. La matriz BitSet puede aumentar de tamaño según sea necesario. Esto lo hace similar a un vector de bits. Esta es una clase heredada pero ha sido completamente rediseñada en Java 2, versión 1.4.
BitSet define los siguientes dos constructores.
No Señor. | Constructor y descripción |
---|---|
1 | BitSet( ) Este constructor crea un objeto predeterminado. |
2 | BitSet(int size) Este constructor le permite especificar su tamaño inicial, es decir, el número de bits que puede contener. Todos los bits se inicializan a cero. |
BitSet implementa la interfaz Cloneable y define los métodos enumerados en la siguiente tabla:
No Señor. | Método y descripción |
---|---|
1 | void and(BitSet bitSet) Y aplica el contenido del objeto BitSet que invoca con los especificados por bitSet. El resultado se coloca en el objeto que invoca. |
2 | void andNot(BitSet bitSet) Por cada bit de bitSet, se borra el bit correspondiente en el BitSet de invocación. |
3 | int cardinality( ) Devuelve el número de bits establecidos en el objeto que invoca. |
4 | void clear( ) Ceros todos los bits. |
5 | void clear(int index) Pone a cero el bit especificado por índice. |
6 | void clear(int startIndex, int endIndex) Pone a cero los bits desde startIndex hasta endIndex. |
7 | Object clone( ) Duplica el objeto BitSet que invoca. |
8 | boolean equals(Object bitSet) Devuelve verdadero si el conjunto de bits de invocación es equivalente al pasado en bitSet. De lo contrario, el método devuelve falso. |
9 | void flip(int index) Invierte el bit especificado por el índice. |
10 | void flip(int startIndex, int endIndex) Invierte los bits de startIndex a endIndex. |
11 | boolean get(int index) Devuelve el estado actual del bit en el índice especificado. |
12 | BitSet get(int startIndex, int endIndex) Devuelve un BitSet que consta de los bits desde startIndex hasta endIndex. El objeto que invoca no se cambia. |
13 | int hashCode( ) Devuelve el código hash del objeto que invoca. |
14 | boolean intersects(BitSet bitSet) Devuelve verdadero si al menos un par de bits correspondientes dentro del objeto que invoca y bitSet son 1. |
15 | boolean isEmpty( ) Devuelve verdadero si todos los bits del objeto que invoca son cero. |
dieciséis | int length( ) Devuelve el número de bits necesarios para contener el contenido del BitSet de invocación. Este valor está determinado por la ubicación del último bit. |
17 | int nextClearBit(int startIndex) Devuelve el índice del siguiente bit borrado (es decir, el siguiente bit cero), comenzando desde el índice especificado por startIndex. |
18 | int nextSetBit(int startIndex) Devuelve el índice del siguiente bit establecido (es decir, el siguiente 1 bit), comenzando desde el índice especificado por startIndex. Si no se establece ningún bit, se devuelve -1. |
19 | void or(BitSet bitSet) Ordena el contenido del objeto BitSet que invoca con el especificado por bitSet. El resultado se coloca en el objeto que invoca. |
20 | void set(int index) Establece el bit especificado por índice. |
21 | void set(int index, boolean v) Establece el bit especificado por el índice en el valor pasado en v. Verdadero establece el bit, falso lo borra. |
22 | void set(int startIndex, int endIndex) Establece los bits de startIndex a endIndex. |
23 | void set(int startIndex, int endIndex, boolean v) Establece los bits de startIndex a endIndex, al valor pasado en v. True establece los bits, false borra los bits. |
24 | int size( ) Devuelve el número de bits del objeto BitSet que invoca. |
25 | String toString( ) Devuelve la cadena equivalente al objeto BitSet que invoca. |
26 | void xor(BitSet bitSet) XORs el contenido del objeto BitSet que invoca con el especificado por bitSet. El resultado se coloca en el objeto que invoca. |
Ejemplo
El siguiente programa ilustra varios de los métodos admitidos por esta estructura de datos:
import java.util.BitSet;
public class BitSetDemo {
public static void main(String args[]) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
// set some bits
for(int i = 0; i < 16; i++) {
if((i % 2) == 0) bits1.set(i);
if((i % 5) != 0) bits2.set(i);
}
System.out.println("Initial pattern in bits1: ");
System.out.println(bits1);
System.out.println("\nInitial pattern in bits2: ");
System.out.println(bits2);
// AND bits
bits2.and(bits1);
System.out.println("\nbits2 AND bits1: ");
System.out.println(bits2);
// OR bits
bits2.or(bits1);
System.out.println("\nbits2 OR bits1: ");
System.out.println(bits2);
// XOR bits
bits2.xor(bits1);
System.out.println("\nbits2 XOR bits1: ");
System.out.println(bits2);
}
}
Esto producirá el siguiente resultado:
Salida
Initial pattern in bits1:
{0, 2, 4, 6, 8, 10, 12, 14}
Initial pattern in bits2:
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}
bits2 AND bits1:
{2, 4, 6, 8, 12, 14}
bits2 OR bits1:
{0, 2, 4, 6, 8, 10, 12, 14}
bits2 XOR bits1:
{}