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:
{}