Класс BitSet
- java.lang.Object
-
- java.util.BitSet
- Все реализованные интерфейсы:
-
Serializable,Cloneable
public class BitSet extends Object implements Cloneable, Serializable
Этот класс реализует вектор битов, который увеличивается по мере необходимости. Каждый компонент набора битов имеет значение boolean. Битами набора битов индексируют неотрицательные целые числа. Отдельные индексированные биты могут быть просмотрены, установлены или очищены. Один набор битов может быть использован для изменения содержимого другого набора битов путём логических операций И, логического включительно ИЛИ и логического исключающего ИЛИ.
По умолчанию все биты в наборе изначально имеют значение false.
Каждый набор битов имеет текущий размер, который представляет количество битов, в настоящее время используемых набором битов. Обратите внимание, что размер связан с реализацией набора битов, поэтому он может меняться в зависимости от реализации. Длина набора битов относится к логической длине набора битов и определяется независимо от реализации.
Если не указано иное, передача null-параметра любому методу в наборе битов приведёт к NullPointerException.
Набор битов не является потокобезопасным без внешней синхронизации.
- С:
- 1.0
- См. также:
- Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
BitSet() | Создаёт новый набор битов. |
BitSet(int nbits) | Создаёт набор битов, размер которого достаточно велик для явного представления битов с индексами в диапазоне |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | and(BitSet set) | Выполняет логическую операцию И для этого целевого набора битов с набором битов аргумента. |
void | andNot(BitSet set) | Очищает все биты в этом наборе битов, соответствующие битам, установленным в указанном наборе битов. |
int | cardinality() | Возвращает количество битов, установленных в |
void | clear() | Устанавливает все биты в этом BitSet в |
void | clear(int bitIndex) | Устанавливает бит, указанный индексом, в |
void | clear(int fromIndex,
int toIndex) | Устанавливает биты от указанного |
Object | clone() | Клонирование этого набора битов создаёт новый набор битов, который ему равен. |
boolean | equals(Object obj) | Сравнивает этот объект с указанным объектом. |
void | flip(int bitIndex) | Устанавливает бит в указанном индексе в дополнение к его текущему значению. |
void | flip(int fromIndex,
int toIndex) | Устанавливает каждый бит от указанного |
boolean | get(int bitIndex) | Возвращает значение бита с указанным индексом. |
BitSet | get(int fromIndex,
int toIndex) | Возвращает новый набор битов, состоящий из битов из этого набора битов от |
int | hashCode() | Возвращает хеш-код для этого набора битов. |
boolean | intersects(BitSet set) | Возвращает true, если указанный набор битов имеет биты, установленные в |
boolean | isEmpty() | Возвращает true, если этот набор битов не содержит битов, установленных в |
int | length() | Возвращает "логический размер" этого набора битов: индекс самого правого установленного бита плюс один. |
int | nextClearBit(int fromIndex) | Возвращает индекс первого бита, установленного в |
int | nextSetBit(int fromIndex) | Возвращает индекс первого бита, установленного в |
void | or(BitSet set) | Выполняет логическую операцию ИЛИ для этого набора битов с набором битов аргумента. |
int | previousClearBit(int fromIndex) | Возвращает индекс ближайшего бита, установленного в |
int | previousSetBit(int fromIndex) | Возвращает индекс ближайшего бита, установленного в |
void | set(int bitIndex) | Устанавливает бит в указанном индексе в |
void | set(int bitIndex,
boolean value) | Устанавливает бит в указанном индексе в указанное значение. |
void | set(int fromIndex,
int toIndex) | Устанавливает биты от указанного |
void | set(int fromIndex,
int toIndex,
boolean value) | Устанавливает биты от указанного |
int | size() | Возвращает количество битов, фактически используемых этим набором битов для представления значений битов. |
IntStream | stream() | Возвращает поток индексов, для которых этот набор битов содержит бит в состоянии установки. |
byte[] | toByteArray() | Возвращает новый массив байтов, содержащий все биты в этом наборе битов. |
long[] | toLongArray() | Возвращает новый массив long, содержащий все биты в этом наборе битов. |
String | toString() | Возвращает строковое представление этого набора битов. |
static BitSet | valueOf(byte[] bytes) | Возвращает новый набор битов, содержащий все биты в заданном массиве байтов. |
static BitSet | valueOf(long[] longs) | Возвращает новый набор битов, содержащий все биты в заданном массиве long. |
static BitSet | valueOf(ByteBuffer bb) | Возвращает новый набор битов, содержащий все биты в заданном буфере байтов между его позицией и пределом. |
static BitSet | valueOf(LongBuffer lb) | Возвращает новый набор битов, содержащий все биты в заданном буфере long между его позицией и пределом. |
void | xor(BitSet set) | Выполняет логическую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ для этого набора битов с набором битов аргумента. |
Методы, объявленные в классе java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
BitSet
public BitSet()
Создаёт новый набор битов. Все биты изначально false.
BitSet
public BitSet(int nbits)
Создаёт набор битов, размер которого достаточно велик для явного представления битов с индексами в диапазоне 0 по nbits-1. Все биты изначально false.
- Параметры:
-
nbits- начальный размер набора битов - Исключения:
-
NegativeArraySizeException- если указанный начальный размер отрицательный
Методы
valueOf
public static BitSet valueOf(long[] longs)
Возвращает новый набор битов, содержащий все биты в данном массиве long.
Точнее, BitSet.valueOf(longs).get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)
для всех n < 64 * longs.length.
Этот метод эквивалентен BitSet.valueOf(LongBuffer.wrap(longs)).
- Параметры:
-
longs- массив long, содержащий представление little-endian последовательности битов, которые будут использоваться в качестве начальных битов нового набора битов - Возвращает:
- a
BitSetcontaining all the bits in the long array - С версии:
- 1.7
valueOf
public static BitSet valueOf(LongBuffer lb)
Возвращает новый набор битов, содержащий все биты в данном буфере long между его позицией и лимитом.
Точнее, BitSet.valueOf(lb).get(n) == ((lb.get(lb.position()+n/64) & (1L<<(n%64))) != 0)
для всех n < 64 * lb.remaining().
Этот метод не изменяет буфер long, и набор битов не сохраняет ссылку на буфер.
- Параметры:
-
lb- буфер long, содержащий представление little-endian последовательности битов между его позицией и лимитом, которые будут использоваться в качестве начальных битов нового набора битов - Возвращает:
- a
BitSetcontaining all the bits in the buffer in the specified range - С версии:
- 1.7
valueOf
public static BitSet valueOf(byte[] bytes)
Возвращает новый набор битов, содержащий все биты в данном массиве byte.
Точнее, BitSet.valueOf(bytes).get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
для всех n < 8 * bytes.length.
Этот метод эквивалентен BitSet.valueOf(ByteBuffer.wrap(bytes)).
- Параметры:
-
bytes- массив byte, содержащий представление little-endian последовательности битов, которые будут использоваться в качестве начальных битов нового набора битов - Возвращает:
- a
BitSetcontaining all the bits in the byte array - С версии:
- 1.7
valueOf
public static BitSet valueOf(ByteBuffer bb)
Возвращает новый набор битов, содержащий все биты в данном буфере byte между его позицией и лимитом.
Точнее, BitSet.valueOf(bb).get(n) == ((bb.get(bb.position()+n/8) & (1<<(n%8))) != 0)
для всех n < 8 * bb.remaining().
Этот метод не изменяет буфер byte, и набор битов не сохраняет ссылку на буфер.
- Параметры:
-
bb- буфер byte, содержащий представление little-endian последовательности битов между его позицией и лимитом, которые будут использоваться в качестве начальных битов нового набора битов - Возвращает:
- a
BitSetcontaining all the bits in the buffer in the specified range - С версии:
- 1.7
toByteArray
public byte[] toByteArray()
Возвращает новый массив byte, содержащий все биты в этом наборе битов.
Точнее, если byte[] bytes = s.toByteArray();
то bytes.length == (s.length()+7)/8 и s.get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
для всех n < 8 * bytes.length.
- Возвращает:
- массив byte, содержащий представление little-endian всех битов в этом наборе битов
- С версии:
- 1.7
toLongArray
public long[] toLongArray()
Возвращает новый массив long, содержащий все биты в этом наборе битов.
Точнее, если long[] longs = s.toLongArray();
то longs.length == (s.length()+63)/64 и s.get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)
для всех n < 64 * longs.length.
- Возвращает:
- массив long, содержащий представление little-endian всех битов в этом наборе битов
- С версии:
- 1.7
flip
public void flip(int bitIndex)
Устанавливает бит по указанному индексу в дополнение к его текущему значению.
- Параметры:
-
bitIndex- индекс бита для инвертирования - Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен - С версии:
- 1.4
flip
public void flip(int fromIndex,
int toIndex) Устанавливает каждый бит от указанного fromIndex (включительно) до указанного toIndex (исключительно) в дополнение к его текущему значению.
- Параметры:
-
fromIndex- индекс первого бита для инвертирования -
toIndex- индекс после последнего бита для инвертирования - Исключения:
-
IndexOutOfBoundsException- еслиfromIndexотрицателен, илиtoIndexотрицателен, илиfromIndexбольше чемtoIndex - С версии:
- 1.4
set
public void set(int bitIndex)
Устанавливает бит по указанному индексу в true.
- Параметры:
-
bitIndex- индекс бита - Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен - С версии:
- 1.0
set
public void set(int bitIndex,
boolean value) Устанавливает бит по указанному индексу в указанное значение.
- Параметры:
-
bitIndex- индекс бита -
value- булево значение для установки - Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен - С версии:
- 1.4
set
public void set(int fromIndex,
int toIndex) Устанавливает биты от указанного fromIndex (включительно) до указанного toIndex (исключительно) в true.
- Параметры:
-
fromIndex- индекс первого бита для установки -
toIndex- индекс после последнего бита для установки - Исключения:
-
IndexOutOfBoundsException- еслиfromIndexотрицателен, илиtoIndexотрицателен, илиfromIndexбольше чемtoIndex - С версии:
- 1.4
set
public void set(int fromIndex,
int toIndex,
boolean value) Устанавливает биты от указанного fromIndex (включительно) до указанного toIndex (исключительно) в указанное значение.
- Параметры:
-
fromIndex- индекс первого бита для установки -
toIndex- индекс после последнего бита для установки -
value- значение для установки выбранных битов - Исключения:
-
IndexOutOfBoundsException- еслиfromIndexотрицателен, илиtoIndexотрицателен, илиfromIndexбольше чемtoIndex - С версии:
- 1.4
clear
public void clear(int bitIndex)
Устанавливает бит, указанный индексом, в false.
- Параметры:
-
bitIndex- индекс бита для очистки - Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен - С версии:
- 1.0
clear
public void clear(int fromIndex,
int toIndex) Устанавливает биты от указанного fromIndex (включительно) до указанного toIndex (исключительно) в false.
- Параметры:
-
fromIndex- индекс первого бита для очистки -
toIndex- индекс после последнего бита для очистки - Исключения:
-
IndexOutOfBoundsException- еслиfromIndexотрицателен, илиtoIndexотрицателен, илиfromIndexбольше чемtoIndex - С версии:
- 1.4
clear
public void clear()
Устанавливает все биты в этом BitSet в false.
- С версии:
- 1.4
get
public boolean get(int bitIndex)
Возвращает значение бита с указанным индексом. Значение равно true, если бит с индексом bitIndex в данный момент установлен в этом BitSet; в противном случае результат равен false.
- Параметры:
-
bitIndex- индекс бита - Возвращает:
- значение бита с указанным индексом
- Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен
get
public BitSet get(int fromIndex,
int toIndex) Возвращает новый BitSet, составленный из битов из этого BitSet от fromIndex (включительно) до toIndex (исключительно).
- Параметры:
-
fromIndex- индекс первого бита для включения -
toIndex- индекс после последнего бита для включения - Возвращает:
- новый
BitSetиз диапазона этогоBitSet - Исключения:
-
IndexOutOfBoundsException- еслиfromIndexотрицателен, илиtoIndexотрицателен, илиfromIndexбольше чемtoIndex - С версии:
- 1.4
nextSetBit
public int nextSetBit(int fromIndex)
Возвращает индекс первого бита, установленного в true, который встречается в или после указанного начального индекса. Если такого бита не существует, то возвращается -1.
Для итерации по true битам в BitSet, используйте следующий цикл:
for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
// operate on index i here
if (i == Integer.MAX_VALUE) {
break; // or (i+1) would overflow
}
}
- Параметры:
-
fromIndex- индекс, с которого начинать проверку (включительно) - Возвращает:
- индекс следующего установленного бита или
-1, если такого бита нет - Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен - С версии:
- 1.4
nextClearBit
public int nextClearBit(int fromIndex)
Возвращает индекс первого бита, установленного в false, который встречается в или после указанного начального индекса.
- Параметры:
-
fromIndex- индекс, с которого начинать проверку (включительно) - Возвращает:
- индекс следующего очищенного бита
- Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицателен - С версии:
- 1.4
previousSetBit
public int previousSetBit(int fromIndex)
Возвращает индекс ближайшего бита, установленного в true, который встречается до или в указанном начальном индексе. Если такого бита не существует, или если в качестве начального индекса задано -1, то возвращается -1.
Для итерации по true битам в BitSet, используйте следующий цикл:
for (int i = bs.length(); (i = bs.previousSetBit(i-1)) >= 0; ) {
// operate on index i here
}
- Параметры:
-
fromIndex- индекс, с которого начинать проверку (включительно) - Возвращает:
- индекс предыдущего установленного бита или
-1, если такого бита нет - Исключения:
-
IndexOutOfBoundsException- если указанный индекс меньше чем-1 - С версии:
- 1.7
previousClearBit
public int previousClearBit(int fromIndex)
Возвращает индекс ближайшего бита, установленного в false, который встречается на или до указанного начального индекса. Если такого бита нет, или если -1 задано в качестве начального индекса, то возвращается -1.
- Параметры:
-
fromIndex- индекс для начала проверки (включительно) - Возвращает:
- индекс предыдущего сброшенного бита или
-1, если такого бита нет - Выбрасывает:
-
IndexOutOfBoundsException- если указанный индекс меньше-1 - С момента:
- 1.7
length
public int length()
Возвращает "логический размер" этого BitSet: индекс самого старшего установленного бита в BitSet плюс единица. Возвращает ноль, если в BitSet нет установленных битов.
- Возвращает:
- логический размер этого
BitSet - С момента:
- 1.2
isEmpty
public boolean isEmpty()
Возвращает true, если этот BitSet не содержит битов, установленных в true.
- Возвращает:
- булево значение, указывающее, пуст ли этот
BitSet - С момента:
- 1.4
intersects
public boolean intersects(BitSet set)
Возвращает true, если в указанном BitSet имеются какие-либо биты, установленные в true, которые также установлены в true в этом BitSet.
- Параметры:
-
set-BitSetдля пересечения - Возвращает:
- булево значение, указывающее, пересекается ли этот
BitSetс указаннымBitSet - С момента:
- 1.4
cardinality
public int cardinality()
Возвращает количество битов, установленных в true в этом BitSet.
- Возвращает:
- количество битов, установленных в
trueв этомBitSet - С момента:
- 1.4
and
public void and(BitSet set)
Выполняет логическое И этого целевого набора битов с набором битов аргумента. Этот набор битов изменяется таким образом, что каждый бит в нём имеет значение true тогда и только тогда, когда он изначально имел значение true и соответствующий бит в наборе битов-аргументе также имел значение true.
- Параметры:
-
set- набор битов
or
public void or(BitSet set)
Выполняет логическое ИЛИ этого набора битов с набором битов аргумента. Этот набор битов изменяется таким образом, что бит в нём имеет значение true тогда и только тогда, когда он либо уже имел значение true либо соответствующий бит в наборе битов аргумента имеет значение true.
- Параметры:
-
set- набор битов
xor
public void xor(BitSet set)
Выполняет логическое Исключающее ИЛИ этого набора битов с набором битов аргумента. Этот набор битов изменяется таким образом, что бит в нём имеет значение true тогда и только тогда, когда выполняется одно из следующих утверждений:
- Бит изначально имеет значение
true, а соответствующий бит в аргументе имеет значениеfalse. - Бит изначально имеет значение
false, а соответствующий бит в аргументе имеет значениеtrue.
- Параметры:
-
set- набор битов
andNot
public void andNot(BitSet set)
Сбрасывает все биты в этом BitSet, у которых соответствующий бит установлен в указанном BitSet.
- Параметры:
-
set-BitSetдля маскирования этогоBitSet - С момента:
- 1.2
hashCode
public int hashCode()
Возвращает значение хэш-кода для этого набора битов. Хэш-код зависит только от того, какие биты установлены в этом BitSet.
Хэш-код определяется как результат следующего вычисления:
public int hashCode() {
long h = 1234;
long[] words = toLongArray();
for (int i = words.length; --i >= 0; )
h ^= words[i] * (i + 1);
return (int)((h >> 32) ^ h);
} Обратите внимание, что хэш-код изменяется, если набор битов изменяется.- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого набора битов
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
size
public int size()
Возвращает количество битов памяти, фактически используемых этим BitSet для представления значений битов. Максимальный элемент в наборе — элемент с индексом size - 1.
- Возвращает:
- количество битов в этом наборе битов
equals
public boolean equals(Object obj)
Сравнивает этот объект со специфицированным объектом. Результат равен true тогда и только тогда, когда аргумент не null и является объектом Bitset с точно таким же набором битов, установленных в true, как и в этом наборе битов. То есть для каждого неотрицательного индекса int k,
((BitSet)obj).get(k) == this.get(k)должно быть истинно. Текущие размеры двух наборов битов не сравниваются.
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- объект для сравнения - Возвращает:
-
trueесли объекты совпадают;falseв противном случае - См. также:
size()
clone
public Object clone()
Клонирование этого BitSet создаёт новый BitSet, равный ему. Клон набора битов — это другой набор битов, в котором точно такие же биты установлены в true как в этом наборе битов.
toString
public String toString()
Возвращает строковое представление этого набора битов. Для каждого индекса, для которого этот BitSet содержит бит в состоянии установления, в результате включается десятичное представление этого индекса. Такие индексы перечисляются в порядке возрастания, разделённые ", " (запятая и пробел), и окружены фигурными скобками, что соответствует стандартной математической записи для набора целых чисел.
Пример:
BitSet drPepper = new BitSet();Теперь
drPepper.toString() возвращает "{}". drPepper.set(2);Теперь
drPepper.toString() возвращает "{2}". drPepper.set(4); drPepper.set(10);Теперь
drPepper.toString() возвращает "{2, 4, 10}".stream
public IntStream stream()
Возвращает поток индексов, для которых этот BitSet содержит бит в состоянии установления. Индексы возвращаются в порядке возрастания. Размер потока равен количеству битов в состоянии установления, равному значению, возвращаемому методом cardinality().
Поток привязывается к этому набору битов в момент начала терминальной операции потока (в частности, итератор для потока привязывается поздно). Если набор битов изменяется во время этой операции, результат не определён.
- Возвращает:
- поток целых чисел, представляющих индексы набора
- С момента:
- 1.8
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/BitSet.html