public class BitSet extends Object implements Cloneable, Serializable
boolean
值。
BitSet
的位由非负整数索引。
可以检查,设置或清除单独的索引位。
一个BitSet
可以用于通过逻辑AND,逻辑包括OR和逻辑异或运算来修改另一个BitSet
的内容。
默认情况下,集合中的所有位最初都具有值false
。
每个位集具有当前大小,这是位设置当前使用的空间位数。 请注意,这个大小与一个位的实现有关,所以它可能会随着实现而改变。 位集合的长度与位集合的逻辑长度相关,并且独立于实现来定义。
除非另有说明,一个null参数传递给任何方法在BitSet
将导致NullPointerException
。
BitSet
对于无需外部同步的多线程使用是不安全的。
Constructor and Description |
---|
BitSet()
创建一个新的位集。
|
BitSet(int nbits)
创建一个位集合,其初始大小足够大以显式表示具有
0 到
nbits-1 范围内的索引的位。
|
Modifier and Type | Method and Description |
---|---|
void |
and(BitSet set)
执行此参数位置位的此目标位设置的逻辑
AND 。
|
void |
andNot(BitSet set)
清除所有的位,这
BitSet 其相应的位被设置在指定的
BitSet 。
|
int |
cardinality()
返回此
BitSet 设置为
true 的
BitSet 。
|
void |
clear()
将此BitSet中的所有位设置为
false 。
|
void |
clear(int bitIndex)
将索引指定的位设置为
false 。
|
void |
clear(int fromIndex, int toIndex)
将指定的
fromIndex (含)的位设置为
toIndex (排他)到
false 。
|
Object |
clone()
克隆这个
BitSet 产生一个新的
BitSet 等于它。
|
boolean |
equals(Object obj)
将此对象与指定对象进行比较。
|
void |
flip(int bitIndex)
将指定索引处的位设置为其当前值的补码。
|
void |
flip(int fromIndex, int toIndex)
将指定的每一位
fromIndex (含)到指定的
toIndex (独家)为其当前值的补码。
|
boolean |
get(int bitIndex)
返回具有指定索引的位的值。
|
BitSet |
get(int fromIndex, int toIndex)
返回一个新
BitSet 组成位从这个
BitSet 从
fromIndex (含)至
toIndex (独家)。
|
int |
hashCode()
返回此位集的哈希码值。
|
boolean |
intersects(BitSet set)
如果指定,则返回true
BitSet 具有设置为任何位
true 这也被设置为
true 这个
BitSet 。
|
boolean |
isEmpty()
如果此
BitSet 包含设置为
true 位,则返回true。
|
int |
length()
返回这个
BitSet 的“逻辑大小”:
BitSet 加上最高位的索引。
|
int |
nextClearBit(int fromIndex)
返回在指定的起始索引上或之后设置为
false 的第一个位的索引。
|
int |
nextSetBit(int fromIndex)
返回在指定的起始索引上或之后发生的第一个位的索引设置为
true 。
|
void |
or(BitSet set)
使用位设置参数执行该位的逻辑
或 。
|
int |
previousClearBit(int fromIndex)
返回被设置为最接近的位的索引
false 上或指定的起始索引之前发生。
|
int |
previousSetBit(int fromIndex)
返回被设置为最接近的位的索引
true 上或指定的起始索引之前发生。
|
void |
set(int bitIndex)
将指定索引处的位设置为
true 。
|
void |
set(int bitIndex, boolean value)
将指定索引处的位设置为指定值。
|
void |
set(int fromIndex, int toIndex)
将指定的
fromIndex (含)的位设置为指定的
toIndex (排他)到
true 。
|
void |
set(int fromIndex, int toIndex, boolean value)
将指定的
fromIndex (含)的位设置为指定值的
toIndex (排除)。
|
int |
size()
返回此
BitSet 实际使用的空间位数,以表示位值。
|
IntStream |
stream()
返回此
BitSet 包含设置状态位的索引流。
|
byte[] |
toByteArray()
返回一个包含该位集中所有位的新字节数组。
|
long[] |
toLongArray()
返回一个包含该位集合中所有位的新长数组。
|
String |
toString()
返回此位集的字符串表示形式。
|
static BitSet |
valueOf(byte[] bytes)
返回包含给定字节数组中所有位的新位集合。
|
static BitSet |
valueOf(ByteBuffer bb)
返回一个新的位集,其中包含给定字节缓冲区中位置和极限之间的所有位。
|
static BitSet |
valueOf(long[] longs)
返回包含给定长数组中所有位的新位集。
|
static BitSet |
valueOf(LongBuffer lb)
返回包含给定长缓冲区中其位置和极限之间的所有位的新位集合。
|
void |
xor(BitSet set)
使用位设置参数执行该位的逻辑
异或 。
|
public BitSet()
false
。
public BitSet(int nbits)
0
到nbits-1
。
所有位最初false
。
nbits
- 位的初始大小
NegativeArraySizeException
- 如果指定的初始大小为负
public static BitSet valueOf(long[] longs)
更确切地说,
BitSet.valueOf(longs).get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)
全部为n < 64 * longs.length
。
此方法相当于BitSet.valueOf(LongBuffer.wrap(longs))
。
longs
- 一个长数组,其中包含要用作新位集初始位的位序列的小端子表示
BitSet
包含长阵列中的所有位
public static BitSet valueOf(LongBuffer lb)
更确切地说,
BitSet.valueOf(lb).get(n) == ((lb.get(lb.position()+n/64) & (1L<<(n%64))) != 0)
为所有n < 64 * lb.remaining()
。
长缓冲区不被该方法修改,并且不对该缓冲区的引用保留位设置。
lb
- 一个长缓冲区,其中包含位置和极限之间的位序列的小端子表示,用作新位组的初始位
BitSet
包含缓冲区中指定范围内的所有位
public static BitSet valueOf(byte[] bytes)
更确切地说,
BitSet.valueOf(bytes).get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
为所有n < 8 * bytes.length
。
此方法相当于BitSet.valueOf(ByteBuffer.wrap(bytes))
。
bytes
- 一个字节数组,其中包含要用作新位集初始位的位序列的小端子表示
BitSet
包含字节数组中的所有位
public static BitSet valueOf(ByteBuffer bb)
更确切地说,
BitSet.valueOf(bb).get(n) == ((bb.get(bb.position()+n/8) & (1<<(n%8))) != 0)
全部为n < 8 * bb.remaining()
。
字节缓冲区不被该方法修改,并且该位不保留对缓冲区的引用。
bb
- 一个字节缓冲器,其中包含位置和极限之间的位序列的小端表示,用作新位组的初始位
BitSet
包含缓冲区中指定范围内的所有位
public byte[] toByteArray()
更准确地说,如果
byte[] bytes = s.toByteArray();
然后bytes.length == (s.length()+7)/8
和
s.get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
为所有n < 8 * bytes.length
。
public long[] toLongArray()
更准确地说,如果
long[] longs = s.toLongArray();
然后longs.length == (s.length()+63)/64
和
s.get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)
全部为n < 64 * longs.length
。
public void flip(int bitIndex)
bitIndex
- 翻转的位的索引
IndexOutOfBoundsException
- 如果指定的索引为负数
public void flip(int fromIndex, int toIndex)
fromIndex
(含)到指定的
toIndex
(独家)为其当前值的补码。
fromIndex
- 第一位的索引翻转
toIndex
- 索引后最后一位翻转
IndexOutOfBoundsException
- 如果
fromIndex
为负数,或
toIndex
为负数,或
fromIndex
大于
toIndex
public void set(int bitIndex)
true
。
bitIndex
- 一个位索引
IndexOutOfBoundsException
- 如果指定的索引为负数
public void set(int bitIndex, boolean value)
bitIndex
- 一个位索引
value
- 要设置的布尔值
IndexOutOfBoundsException
- 如果指定的索引为负
public void set(int fromIndex, int toIndex)
fromIndex
(含)的位设置为指定的
toIndex
(排他)到
true
。
fromIndex
- 要设置的第一个位的索引
toIndex
- 最后一位被设置后的索引
IndexOutOfBoundsException
- 如果
fromIndex
为负数,或
toIndex
为负数,或
fromIndex
大于
toIndex
public void set(int fromIndex, int toIndex, boolean value)
fromIndex
(含)指定的位设置为指定值的
toIndex
(排除)。
fromIndex
- 要设置的第一个位的索引
toIndex
- 最后一位被设置后的索引
value
- 设置所选位的值
IndexOutOfBoundsException
- 如果
fromIndex
为负数,或
toIndex
为负数,或
fromIndex
大于
toIndex
public void clear(int bitIndex)
false
。
bitIndex
- 要清除的位的索引
IndexOutOfBoundsException
- 如果指定的索引为负数
public void clear(int fromIndex, int toIndex)
fromIndex
(含)的位设置为指定的
toIndex
(排他)到
false
。
fromIndex
- 要清除的第一个位的索引
toIndex
- 最后一位被清除后的索引
IndexOutOfBoundsException
- 如果
fromIndex
为负数,或
toIndex
为负数,或
fromIndex
大于
toIndex
public void clear()
false
。
public boolean get(int bitIndex)
true
如果该位与索引bitIndex
当前设置在这BitSet
;
否则,结果是false
。
bitIndex
- 比特索引
IndexOutOfBoundsException
- 如果指定的索引为负数
public BitSet get(int fromIndex, int toIndex)
BitSet
组成位从这个
BitSet
从
fromIndex
(含)至
toIndex
(独家)。
fromIndex
- 要包含的第一位的索引
toIndex
- 索引后最后一位要包含
BitSet
从这个
BitSet
的范围
IndexOutOfBoundsException
- 如果
fromIndex
为负数,或
toIndex
为负数,或
fromIndex
大于
toIndex
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 }
fromIndex
- 开始检查的索引(含)
-1
如果没有这样的位
IndexOutOfBoundsException
- 如果指定的索引为负数
public int nextClearBit(int fromIndex)
false
。
fromIndex
- 从(含)开始检查的索引
IndexOutOfBoundsException
- 如果指定的索引为负
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
public int previousClearBit(int fromIndex)
false
上或指定的起始索引之前发生。
如果不存在这样的位,或者如果给出-1
作为起始索引,则返回-1
。
fromIndex
- 从(含)开始检查的索引
-1
如果没有这样的位
IndexOutOfBoundsException
- 如果指定的索引小于
-1
public int length()
BitSet
的“逻辑大小”: BitSet
加上最高位的索引。
如果BitSet
包含设置位,则返回零。
BitSet
的逻辑大小
public boolean isEmpty()
BitSet
包含设置为
true
位,则返回true。
BitSet
是否为空
public boolean intersects(BitSet set)
BitSet
具有设置为任何位
true
这也被设置为
true
这个
BitSet
。
set
-
BitSet
相交
BitSet
指定的BitSet
BitSet
public int cardinality()
BitSet
设置为
true
的
BitSet
。
true
中的位数设置为
BitSet
public void and(BitSet set)
true
当且仅当两者它最初所具有的值true
和在比特组参数中的相应位也具有的值true
。
set
- 有点设置
public void or(BitSet set)
true
当且仅当它要么已经有了值true
,或在位设置参数对应位的值为true
。
set
- 有点设置
public void xor(BitSet set)
true
:
true
,并且参数中的相应位具有值false
。 false
,并且参数中的相应位具有值true
。 set
- 有点设置
public void andNot(BitSet set)
BitSet
其相应的位被设置在指定的
BitSet
。
set
-
BitSet
用来掩盖这个
BitSet
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)
public int size()
BitSet
实际使用的空间位数,以表示位值。
集合中的最大元素是大小 - 第一个元素。
public boolean equals(Object obj)
true
当且仅当参数不是null
,并且是一个Bitset
对象,具有完全相同的一组位设置为true
作为该位设置。
也就是说,对于每个非int
指数k
,
((BitSet)obj).get(k) == this.get(k)
一定是真的
不比较两个位组的当前大小。
public Object clone()
BitSet
产生一个新的BitSet
等于它。
位集合的克隆是另一个位设置,与该位置1完全相同的位设置为true
。
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}
”。
public IntStream stream()
BitSet
包含设置状态位的索引流。
索引按顺序返回,从最低到最高。
流的大小是设置状态下的位数,等于cardinality()
方法返回的值。
在执行终端流操作期间,位集必须保持不变。 否则,终端流操作的结果未定义。