- java.lang.Object
-
- java.util.BitSet
-
- 实现的所有接口
-
Serializable
,Cloneable
public class BitSet extends Object implements Cloneable, Serializable
该类实现了一个根据需要增长的位向量。 位组的每个组件都具有boolean
值。BitSet
的位由非负整数索引。 可以检查,设置或清除各个索引位。 一个BitSet
可用于通过逻辑AND,逻辑包含OR和逻辑异或运算来修改另一个BitSet
的内容。默认情况下,集合中的所有位最初都具有值
false
。每个位集都有一个当前大小,即当前位集使用的空间位数。 请注意,大小与位集的实现有关,因此它可能随实现而改变。 位集的长度与位集的逻辑长度有关,并且与实现无关地定义。
除非另有说明,否则将null参数传递给
BitSet
任何方法BitSet
将生成NullPointerException
。如果没有外部同步,多线程使用
BitSet
是不安全的。- 从以下版本开始:
- 1.0
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 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
相等的新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)
如果指定的BitSet
任何位设置为true
true
在此BitSet
中也设置为true
,则返回true。boolean
isEmpty()
如果此BitSet
包含设置为true
位,则返回true。int
length()
返回此BitSet
的“逻辑大小”:BitSet
中最高设置位的BitSet
加1。int
nextClearBit(int fromIndex)
返回在指定的起始索引之上或之后发生的设置为false
的第一个位的索引。int
nextSetBit(int fromIndex)
返回在指定的起始索引之上或之后发生的设置为true
的第一个位的索引。void
or(BitSet set)
使用位设置参数执行此位设置的逻辑 OR 。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
包含处于set状态的位的索引流。byte[]
toByteArray()
返回包含此位集中所有位的新字节数组。long[]
toLongArray()
返回包含此位集中所有位的新长数组。String
toString()
返回此位集的字符串表示形式。static BitSet
valueOf(byte[] bytes)
返回包含给定字节数组中所有位的新位集。static BitSet
valueOf(long[] longs)
返回包含给定long数组中所有位的新位集。static BitSet
valueOf(ByteBuffer bb)
返回一个新的位集,其中包含位置和限制之间给定字节缓冲区中的所有位。static BitSet
valueOf(LongBuffer lb)
返回一个新的位集,其中包含位置和限制之间给定长缓冲区中的所有位。void
xor(BitSet set)
使用位设置参数执行此位设置的逻辑 XOR 。
-
-
-
构造方法详细信息
-
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
- 一个长数组,包含一个位序列的小端表示,用作新位集的初始位 - 结果
-
BitSet
包含长数组中的所有位 - 从以下版本开始:
- 1.7
-
valueOf
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
包含指定范围内缓冲区中的所有位 - 从以下版本开始:
- 1.7
-
valueOf
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
包含字节数组中的所有位 - 从以下版本开始:
- 1.7
-
valueOf
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
包含指定范围内缓冲区中的所有位 - 从以下版本开始:
- 1.7
-
toByteArray
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
。- 结果
- 一个字节数组,包含该位集中所有位的小端表示
- 从以下版本开始:
- 1.7
-
toLongArray
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
。- 结果
- 一个长数组,包含该位集中所有位的小端表示
- 从以下版本开始:
- 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
加1。 如果BitSet
包含设置位,则返回零。- 结果
-
这个
BitSet
的逻辑大小 - 从以下版本开始:
- 1.2
-
isEmpty
public boolean isEmpty()
如果此BitSet
包含设置为true
位,则返回true。- 结果
-
boolean指示此
BitSet
是否为空 - 从以下版本开始:
- 1.4
-
intersects
public boolean intersects(BitSet set)
如果指定的BitSet
任何位设置为true
,并且在此BitSet
中也设置为true
,则返回true。- 参数
-
set
-BitSet
与...相交 - 结果
-
boolean指示此
BitSet
是否与指定的BitSet
相交 - 从以下版本开始:
- 1.4
-
cardinality
public int cardinality()
返回此BitSet
设置为true
的BitSet
。- 结果
-
比特设置为数量
true
本BitSet
- 从以下版本开始:
- 1.4
-
and
public void and(BitSet set)
使用参数位设置执行此目标位设置的逻辑AND 。 修改此位集,以使其中的每个位具有值true
当且仅当它们最初都具有值true
且位集参数中的相应位也具有值true
。- 参数
-
set
- 有点集
-
or
public void or(BitSet set)
使用位设置参数执行此位设置的逻辑OR 。 修改此位集,使其中的位具有值true
当且仅当它已经具有值true
或位集参数中的相应位具有值true
。- 参数
-
set
- 有点集
-
xor
public void xor(BitSet set)
使用位设置参数执行此位设置的逻辑XOR 。 修改此位集,以便当且仅当以下语句之一成立时,其中的位具有值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 - 1st元素。- 结果
- 此位设置中当前的位数
-
equals
public boolean equals(Object obj)
将此对象与指定的对象进行比较。 结果是true
当且仅当参数不是null
并且是Bitset
对象时,该位设置为true
的位设置true
。 也就是说,对于每个非负int
索引k
,((BitSet)obj).get(k) == this.get(k)
必须是真的。 不比较两个位组的当前大小。
-
clone
public Object clone()
克隆此BitSet
会生成一个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
包含处于set状态的位的索引流。 索引按从低到高的顺序返回。 流的大小是设置状态中的位数,等于cardinality()
方法返回的值。当终端流操作开始时,流绑定到该位集(具体地,流的分裂器是late-binding )。 如果在该操作期间修改了位集,则结果是未定义的。
- 结果
- 表示集合索引的整数流
- 从以下版本开始:
- 1.8
-
-