Java: la classe BitSet
La classe BitSet crea un tipo speciale di matrice che contiene valori di bit. L'array BitSet può aumentare di dimensioni secondo necessità. Questo lo rende simile a un vettore di bit. Questa è una classe legacy ma è stata completamente riprogettata in Java 2, versione 1.4.
Il BitSet definisce i seguenti due costruttori.
Sr.No. | Costruttore e descrizione |
---|---|
1 | BitSet( ) Questo costruttore crea un oggetto predefinito. |
2 | BitSet(int size) Questo costruttore ti permette di specificare la sua dimensione iniziale, cioè il numero di bit che può contenere. Tutti i bit vengono inizializzati a zero. |
BitSet implementa l'interfaccia Cloneable e definisce i metodi elencati nella tabella seguente -
Sr.No. | Metodo e descrizione |
---|---|
1 | void and(BitSet bitSet) AND i contenuti dell'oggetto BitSet richiamante con quelli specificati da bitSet. Il risultato viene inserito nell'oggetto invocante. |
2 | void andNot(BitSet bitSet) Per ogni 1 bit in bitSet, il bit corrispondente nel BitSet che lo richiama viene cancellato. |
3 | int cardinality( ) Restituisce il numero di bit impostati nell'oggetto richiamante. |
4 | void clear( ) Azzera tutti i bit. |
5 | void clear(int index) Azzera il bit specificato da index. |
6 | void clear(int startIndex, int endIndex) Azzera i bit da startIndex a endIndex. |
7 | Object clone( ) Duplica l'oggetto BitSet che richiama. |
8 | boolean equals(Object bitSet) Restituisce vero se il set di bit di richiamo è equivalente a quello passato in bitSet. In caso contrario, il metodo restituisce false. |
9 | void flip(int index) Inverte il bit specificato dall'indice. |
10 | void flip(int startIndex, int endIndex) Inverte i bit da startIndex a endIndex. |
11 | boolean get(int index) Restituisce lo stato corrente del bit all'indice specificato. |
12 | BitSet get(int startIndex, int endIndex) Restituisce un BitSet costituito dai bit da startIndex a endIndex. L'oggetto invocante non viene modificato. |
13 | int hashCode( ) Restituisce il codice hash per l'oggetto che richiama. |
14 | boolean intersects(BitSet bitSet) Restituisce vero se almeno una coppia di bit corrispondenti all'interno dell'oggetto invocante e bitSet sono 1. |
15 | boolean isEmpty( ) Restituisce vero se tutti i bit nell'oggetto invocante sono zero. |
16 | int length( ) Restituisce il numero di bit necessari per contenere il contenuto del BitSet richiamante. Questo valore è determinato dalla posizione dell'ultimo 1 bit. |
17 | int nextClearBit(int startIndex) Restituisce l'indice del successivo bit cancellato, (ovvero, il successivo zero bit), a partire dall'indice specificato da startIndex. |
18 | int nextSetBit(int startIndex) Restituisce l'indice del successivo bit impostato (ovvero il successivo 1 bit), a partire dall'indice specificato da startIndex. Se non è impostato alcun bit, viene restituito -1. |
19 | void or(BitSet bitSet) OR il contenuto dell'oggetto BitSet che richiama con quello specificato da bitSet. Il risultato viene inserito nell'oggetto invocante. |
20 | void set(int index) Imposta il bit specificato da index. |
21 | void set(int index, boolean v) Imposta il bit specificato da index sul valore passato in v. True imposta il bit, false cancella il bit. |
22 | void set(int startIndex, int endIndex) Imposta i bit da startIndex a endIndex. |
23 | void set(int startIndex, int endIndex, boolean v) Imposta i bit da startIndex a endIndex, al valore passato in v. True imposta i bit, false cancella i bit. |
24 | int size( ) Restituisce il numero di bit nell'oggetto BitSet che richiama. |
25 | String toString( ) Restituisce l'equivalente stringa dell'oggetto BitSet che richiama. |
26 | void xor(BitSet bitSet) XORs il contenuto dell'oggetto BitSet che richiama con quello specificato da bitSet. Il risultato viene inserito nell'oggetto invocante. |
Esempio
Il seguente programma illustra molti dei metodi supportati da questa struttura dati:
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);
}
}
Questo produrrà il seguente risultato:
Produzione
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:
{}