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