Java - a classe BitSet

A classe BitSet cria um tipo especial de array que contém valores de bits. A matriz BitSet pode aumentar de tamanho conforme necessário. Isso o torna semelhante a um vetor de bits. Esta é uma classe legada, mas foi completamente reprojetada em Java 2, versão 1.4.

O BitSet define os dois construtores a seguir.

Sr. Não. Construtor e descrição
1

BitSet( )

Este construtor cria um objeto padrão.

2

BitSet(int size)

Este construtor permite que você especifique seu tamanho inicial, ou seja, o número de bits que pode conter. Todos os bits são inicializados em zero.

BitSet implementa a interface clonável e define os métodos listados na tabela a seguir -

Sr. Não. Método e Descrição
1

void and(BitSet bitSet)

ANDs o conteúdo do objeto BitSet de chamada com aqueles especificados por bitSet. O resultado é colocado no objeto de chamada.

2

void andNot(BitSet bitSet)

Para cada 1 bit no bitSet, o bit correspondente no BitSet invocador é apagado.

3

int cardinality( )

Retorna o número de bits definidos no objeto de chamada.

4

void clear( )

Zera todos os bits.

5

void clear(int index)

Zera o bit especificado pelo índice.

6

void clear(int startIndex, int endIndex)

Zera os bits de startIndex para endIndex.

7

Object clone( )

Duplica o objeto BitSet de chamada.

8

boolean equals(Object bitSet)

Retorna verdadeiro se o conjunto de bits de chamada for equivalente ao passado no conjunto de bits. Caso contrário, o método retorna falso.

9

void flip(int index)

Inverte o bit especificado pelo índice.

10

void flip(int startIndex, int endIndex)

Inverte os bits de startIndex para endIndex.

11

boolean get(int index)

Retorna o estado atual do bit no índice especificado.

12

BitSet get(int startIndex, int endIndex)

Retorna um BitSet que consiste nos bits de startIndex a endIndex. O objeto de chamada não é alterado.

13

int hashCode( )

Retorna o código hash para o objeto de chamada.

14

boolean intersects(BitSet bitSet)

Retorna verdadeiro se pelo menos um par de bits correspondentes dentro do objeto de chamada e bitSet for 1.

15

boolean isEmpty( )

Retorna verdadeiro se todos os bits no objeto de chamada forem zero.

16

int length( )

Retorna o número de bits necessários para conter o conteúdo do BitSet invocador. Este valor é determinado pela localização do último 1 bit.

17

int nextClearBit(int startIndex)

Retorna o índice do próximo bit limpo, (ou seja, o próximo bit zero), começando com o índice especificado por startIndex.

18

int nextSetBit(int startIndex)

Retorna o índice do próximo bit definido (ou seja, o próximo 1 bit), a partir do índice especificado por startIndex. Se nenhum bit for definido, -1 é retornado.

19

void or(BitSet bitSet)

ORs o conteúdo do objeto BitSet invocando com aquele especificado por bitSet. O resultado é colocado no objeto de chamada.

20

void set(int index)

Define o bit especificado pelo índice.

21

void set(int index, boolean v)

Define o bit especificado por índice para o valor passado em v. True define o bit, false limpa o bit.

22

void set(int startIndex, int endIndex)

Define os bits de startIndex para endIndex.

23

void set(int startIndex, int endIndex, boolean v)

Define os bits de startIndex para endIndex, para o valor passado em v. True define os bits, false limpa os bits.

24

int size( )

Retorna o número de bits no objeto BitSet de chamada.

25

String toString( )

Retorna a string equivalente ao objeto BitSet invocando.

26

void xor(BitSet bitSet)

XORs o conteúdo do objeto BitSet de chamada com aquele especificado por bitSet. O resultado é colocado no objeto de chamada.

Exemplo

O programa a seguir ilustra vários dos métodos suportados por esta estrutura de dados -

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);
   }
}

Isso produzirá o seguinte resultado -

Resultado

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