Класс Java Bitset
Класс Bitset создает специальный тип массива для хранения битовых значений. Размер массива BitSet будет увеличиваться по мере необходимости. Это похоже на вектор битов.
Это традиционный класс, но в Java 2 он был полностью переработан.
BitSet определяет два конструктора.
Первый конструктор создает объект по умолчанию:
BitSet()
Второй метод позволяет пользователю указать начальный размер. Все биты инициализируются значением 0.
BitSet(int size)
Методы, определенные в интерфейсе Cloneable, реализованном в BitSet, перечислены в следующей таблице:
| Нет. | Описание метода |
|---|---|
| 1 |
void and(BitSet set) Выполняет логическую операцию AND над этим целевым набором битов и набором битов, переданным в аргументе. |
| 2 |
void andNot(BitSet set) Сбрасывает все биты в этом BitSet, соответствующие биты которых установлены в указанном BitSet. |
| 3 |
int cardinality( ) Возвращает количество битов, установленных в true, в этом BitSet. |
| 4 |
void clear( ) Устанавливает все биты в этом BitSet в false. |
| 5 |
void clear(int index) Устанавливает бит по указанному индексу в false. |
| 6 |
void clear(int startIndex, int endIndex) Устанавливает биты от указанного startIndex (включительно) до указанного toIndex (исключительно) в false. |
| 7 |
Object clone( ) Клонирует этот BitSet, создавая новый BitSet, равный ему. |
| 8 |
boolean equals(Object bitSet) Сравнивает этот объект с указанным объектом. |
| 9 |
void flip(int index) Устанавливает бит по указанному индексу в значение, обратное его текущему значению. |
| 10 |
void flip(int startIndex, int endIndex) Устанавливает каждый бит от указанного fromIndex (включительно) до указанного toIndex (исключительно) в значение, обратное его текущему значению. |
| 11 |
boolean get(int index) Возвращает значение бита по указанному индексу. |
| 12 |
BitSet get(int startIndex, int endIndex) Возвращает новый BitSet, состоящий из битов этого BitSet от fromIndex (включительно) до toIndex (исключительно). |
| 13 |
int hashCode( ) Возвращает значение хеш-кода этого битового набора. |
| 14 |
boolean intersects(BitSet bitSet) Возвращает true, если в указанном BitSet есть бит, установленный в true, который также установлен в true в этом BitSet. |
| 15 |
boolean isEmpty( ) Возвращает true, если этот BitSet не содержит битов, установленных в true. |
| 16 |
int length( ) Возвращает "логический размер" этого BitSet: индекс самого старшего установленного бита в BitSet плюс 1. |
| 17 |
int nextClearBit(int startIndex) Возвращает индекс первого бита, установленного в false, который встречается на указанном начальном индексе или после него. |
| 18 |
int nextSetBit(int startIndex) Возвращает индекс первого бита, установленного в true, который находится на указанном начальном индексе или после него. |
| 19 |
void or(BitSet bitSet) Выполняет логическую операцию OR над этим набором битов и набором битов, переданным в аргументе. |
| 20 |
void set(int index) Устанавливает бит по указанному индексу в true. |
| 21 |
void set(int index, boolean v) Устанавливает бит по указанному индексу в указанное значение. |
| 22 |
void set(int startIndex, int endIndex) Устанавливает биты с указанного fromIndex (включительно) до указанного toIndex (исключительно) в true. |
| 23 |
void set(int startIndex, int endIndex, boolean v) Устанавливает биты с указанного fromIndex (включительно) до указанного toIndex (исключительно) в указанное значение. |
| 24 |
int size( ) Возвращает количество бит пространства, фактически используемого этим BitSet при представлении значений битов. |
| 25 |
String toString( ) Возвращает строковое представление этого битового набора. |
| 26 |
void xor(BitSet bitSet) Выполняет логическую операцию XOR над этим битовым набором и битовым набором, переданным в аргументе. |
Пример
Следующая программа иллюстрирует несколько методов, поддерживаемых этой структурой данных:
Пример
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("Исходный шаблон в bits1: ");
System.out.println(bits1);
System.out.println("\nИсходный шаблон в 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);
}
}
Компиляция и запуск приведённого выше примера дают следующий результат:
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:
{}
Другие расширения
Структуры данных Java