- java.lang.Object
-
- java.util.BitSet
-
- All Implemented Interfaces:
-
Serializable
,Cloneable
public class BitSet extends Object implements Cloneable, Serializable
该类实现了根据需要增长的位向量。 位组的每个组件都有一个boolean
值。BitSet
的位由非负整数索引。 可以检查,设置或清除各个索引位。 一个BitSet
可以用于通过逻辑AND,逻辑包括OR和逻辑异或操作来修改另一个BitSet
的内容。默认情况下,集合中的所有位最初都具有值
false
。每个位集具有当前大小,这是位设置当前使用的空间位数。 请注意,这个大小与一个位的实现有关,所以它可能会随着实现而改变。 位集合的长度与位集合的逻辑长度相关,并且独立于实现来定义。
除非另有说明,否则将null参数传递给
BitSet
任何方法将导致NullPointerException
。A
BitSet
对于无需外部同步的多线程使用是不安全的。- 从以下版本开始:
- 1.0
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
and(BitSet set)
执行此参数位置位的此目标位设置的逻辑 AND 。void
andNot(BitSet set)
清除BitSet
的所有位,其相应位在指定的BitSet
设置。int
cardinality()
返回true
中设置为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)
如果指定,则返回trueBitSet
具有设置为任何位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(long[] longs)
返回包含给定长数组中所有位的新位集。static BitSet
valueOf(ByteBuffer bb)
返回一个包含给定字节缓冲区中所有位在其位置和极限之间的新位集合。static BitSet
valueOf(LongBuffer lb)
返回包含给定长缓冲区中其位置和极限之间的所有位的新位集合。void
xor(BitSet set)
使用位设置参数执行该位的逻辑 异或 。
-
-
-
构造方法详细信息
-
BitSet
public BitSet()
创建一个新的位集。 所有位最初为false
。
-
BitSet
public BitSet(int nbits)
创建一个位集合,其初始大小足够大,以明确表示索引为0
到nbits-1
。 所有位最初为false
。- 参数
-
nbits
- 位的初始大小 - 异常
-
NegativeArraySizeException
- 如果指定的初始大小为负
-
-
方法详细信息
-
valueOf
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
包含长阵列中的所有位 - 从以下版本开始:
- 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
- 一个长缓冲区,包含位置和限制之间的位序列的小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
- 一个字节数组,其中包含要用作新位集初始位的位序列的小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
- 一个字节缓冲区,其中包含位置和极限之间的位序列的小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
包含设置位,则返回零。- 结果
-
这个
BitSet
的逻辑大小 - 从以下版本开始:
- 1.2
-
isEmpty
public boolean isEmpty()
如果此BitSet
包含设置为true
位,则返回true。- 结果
-
布尔值指示此
BitSet
是否为空 - 从以下版本开始:
- 1.4
-
intersects
public boolean intersects(BitSet set)
如果指定,则返回trueBitSet
具有设置为任何位true
,它们也设置为true
这个BitSet
。- 参数
-
set
-BitSet
相交 - 结果
-
指示此
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)
使用位设置参数执行该位的逻辑或 。 此位设置被修改,使得在某个位值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
实际使用的空间位数,以表示位值。 集合中的最大元素是大小 - 第一个元素。- 结果
- 此位设置中当前位数
-
equals
public boolean equals(Object obj)
将此对象与指定对象进行比较。 结果是true
当且仅当参数不是null
并且是一个Bitset
对象,其完全相同的位设置为true
因为该位设置。 也就是说,对于每个非负int
索引k
,((BitSet)obj).get(k) == this.get(k)
一定是真的 不比较两个位组的当前大小。
-
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()
方法返回的值。当终端流操作开始时(特别地,流的分流器是late-binding ),该流绑定到该位集合。 如果在该操作期间修改了位集,则结果未定义。
- 结果
- 表示集合索引的整数流
- 从以下版本开始:
- 1.8
-
-