Bienvenidos sean a este post, hoy hablaremos sobre la estructura de datos llamada BitSet el cual es un tipo especial de array que posee valores de tipo bits, tiene una similitud a un Vector pero de tipo bits. A continuacion veremos los dos tipos de constructores:

  • BitSet(), constructor predeterminado.
  • BitSet(int size), constructor que define la cantidad de elementos que tendra nuestro objeto.

BitSet implementa la interfaz Cloneable, esto nos permite definir los metodos del siguiente listado:

  • void and(BitSet bitSet), implementa un AND logico al objeto invocado con el objeto informado todo de tipo BitSet, el resultado se almacena en el objeto invocador
  • void andNot(BitSet bitSet), del objeto invocador se limpia un bit por cada uno del objeto informado
  • int cardinality(), devuelve el numero de conjunto de bits del objeto invocador
  • void clear(), setea en cero a todos los bits
  • void clear(int indice), setea en cero al bit especificado en el indice
  • void clear(int indiceInicio, int indiceFinal), setea en cero al segmento de bits informado
  • Object clone(), duplica al objeto invocador
  • boolean equals(Object bitSet), devuelve verdadero si el objeto invocador es igual al objeto informado de lo contrario devuelve falso
  • void flip(int indice), invierte el bit informado en el indice
  • void flip(int indiceInicio, int indiceFinal), invierte los bits informados en el segmento informado
  • boolean get(int indice), devuelve el estado del bit en el indice informado
  • BitSet get(int indiceInicio, int indiceFinal), devuelve un objeto BitSet en base al segmento informado
  • int hashCode(), devuelve el codigo hash del objeto invocador
  • boolean intersects(BitSet bitSet), devuelve verdadero si al menos un par de bits dentro del objeto invocador y bitSet son uno
  • boolean isEmpty(), devuelve verdadero si todos los bits del objeto invocador son cero
  • int length(), devuelve el numero de bits necesarios para almacenar el contenido del BitSet invocador, su tamaño es determinado por al menos un bit
  • int nextClearBit(int indiceInicio), devuelve el indice del proximo bit limpiado, comenzando desde el indice informado
  • int nextSetBit(int indiceInicio), devuelve el indice del proximo bit del seteado, comenzando desde el indice informado
  • void or(BitSet bitSet), implementa un OR logico al objeto invocado con el objeto informado todo de tipo BitSet, el resultado se almacena en el objeto invocador
  • void set(int indice), setea el bit especificado en el indice
  • void set(int indice, boolean b), setea el bit especificado en el indice con el valor informado en b, true setea el bit y false limpia el bit
  • void set(int indiceInicio, int indiceFinal), setea los bits en el segmento informado
  • void set(int indiceInicio, int indiceFinal, boolean b), setea los bits en el segmento informado con el valor informado en b, igual que antes true setea el bit y false limpia el bit
  • int size(), devuelve el numero de bits del objeto invocador
  • String toString(), devuelve el valor String (cadena) equivalente del objeto invocador
  • void xor(BitSet bitSet), implementa un XOR logico al objeto invocado con el objeto informado todo de tipo BitSet, el resultado se almacena en el objeto invocador

Despues de ver varios de los metodos disponibles, procedamos a hacer un ejemplo, el nombre del archivo debe ser BitSetDemo.java:

import java.util.BitSet;

public class BitSetDemo
{
        public static void main(String[] args)
        {
                BitSet bits1 = new BitSet(16);
                BitSet bits2 = new BitSet(16);

                for(int i = 0; i < 16; i++)
                {
                        if((i%2) == 0) bits1.set(i);
                        if((i%5) != 0) bits2.set(i);
                }

                System.out.println("Patron inicial de bits1: ");
                System.out.println(bits1);
                System.out.println("\nPatron inicial de bbits2: ");
                System.out.println(bits2);

                bits2.and(bits1);
                System.out.println("\nbits2 AND bits1: ");
                System.out.println(bits2);

                bits2.or(bits1);
                System.out.println("\nbits2 OR bits1: ");
                System.out.println(bits2);

                bits2.xor(bits1);
                System.out.println("\nbits2 XOR bits1: ");
                System.out.println(bits2);
        }
}

En este ejemplo primero importaremos el paquete BitSet, para poder crear un objeto de este tipo, luego crearemos dos objetos de tipo BitSet con un tamaño de 16, despues por medio de un bucle for setearemos algunos bits a los dos objetos creados, nuestro primer bloque mostrara los valores iniciales de los objetos, luego aplicaremos una operacion logica AND sobre bits2 con bits1 y mostraremos el resultado, nuestro siguiente bloque hara una operacion logica OR y mostrara el resultado, por ultimo aplicaremos la operacion logica XOR y mostraremos el resultado en pantalla, si lo compilamos y probamos veremos la siguiente salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java BitSetDemo

Patron inicial de bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

Patron inicial de bbits2:
{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:
{}
tinchicus@dbn001vrt:~/programacion/java/codigo$

Como pueden ver primero tenemos el conjunto seteado en los dos objetos, luego vemos como quedo con las distintas operaciones efectuadas.

En resumen, hoy hemos visto como es la clase BitSet, para que sirve, como implementarla, algunos metodos y un ejemplo practico, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios