java.lang.Object java.util.BitSet
public class BitSet
此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean
值。用非负的整数将 BitSet
的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet
修改另一个 BitSet
的内容。
默认情况下,set 中所有位的初始值都是 false
。
每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。
除非另行说明,否则将 null 参数传递给 BitSet
中的任何方法都将导致 NullPointerException
。
在没有外部同步的情况下,多个线程操作一个 BitSet
是不安全的。
构造方法摘要 | |
---|---|
BitSet() 创建一个新的位 set。 |
|
BitSet(int nbits) 创建一个位 set,它的初始大小足以显式表示索引范围在 0 到 nbits-1 的位。 |
方法摘要 | |
---|---|
void |
and(BitSet set) 对此目标位 set 和参数位 set 执行逻辑与操作。 |
void |
andNot(BitSet set) 清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。 |
int |
cardinality() 返回此 BitSet 中设置为 true 的位数。 |
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() 返回此位 set 的哈希码值。 |
boolean |
intersects(BitSet set) 如果指定的 BitSet 中有设置为 true 的位,并且在此 BitSet 中也将其设置为 true ,则返回 ture。 |
boolean |
isEmpty() 如果此 BitSet 中没有包含任何设置为 true 的位,则返回 ture。 |
int |
length() 返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。 |
int |
nextClearBit(int fromIndex) 返回第一个设置为 false 的位的索引,这发生在指定的起始索引或之后的索引上。 |
int |
nextSetBit(int fromIndex) 返回第一个设置为 true 的位的索引,这发生在指定的起始索引或之后的索引上。 |
void |
or(BitSet set) 对此位 set 和位 set 参数执行逻辑或操作。 |
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 表示位值时实际使用空间的位数。 |
String |
toString() 返回此位 set 的字符串表示形式。 |
void |
xor(BitSet set) 对此位 set 和位 set 参数执行逻辑异或操作。 |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public BitSet()
false
。
public BitSet(int nbits)
0
到
nbits-1
的位。所有的位初始均为
false
。
nbits
- 位 set 的初始大小。
NegativeArraySizeException
- 如果指定的初始大小为负。
方法详细信息 |
---|
public void flip(int bitIndex)
bitIndex
- 要翻转位的索引。
IndexOutOfBoundsException
- 如果指定的索引为负。
public void flip(int fromIndex, int 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
- 要设置的 boolean 值。
IndexOutOfBoundsException
- 如果指定的索引为负。
public void set(int fromIndex, int toIndex)
true
。
fromIndex
- 第一个要设置位的索引。
toIndex
- 最后一个要设置位之后那个位的索引。
IndexOutOfBoundsException
- 如果
fromIndex 为负,或者
toIndex 为负,或者
fromIndex 大于
toIndex。
public void set(int fromIndex, int toIndex, boolean value)
fromIndex
- 第一个要设置位的索引。
toIndex
- 最后一个要设置位之后那个位的索引
value
- 所选择的位上要设置的值
IndexOutOfBoundsException
- 如果
fromIndex 为负,或者
toIndex 为负,或者
fromIndex 大于
toIndex。
public void clear(int bitIndex)
false
。
bitIndex
- 要清除位的索引。
IndexOutOfBoundsException
- 如果指定的索引为负。
public void clear(int fromIndex, int toIndex)
false
。
fromIndex
- 第一个要清除位的索引。
toIndex
- 最后一个要清除位之后那个位的索引。
IndexOutOfBoundsException
- 如果
fromIndex 为负,或者
toIndex 为负,或者
fromIndex 大于
toIndex。
public void clear()
false
。
public boolean get(int bitIndex)
BitSet
中索引
bitIndex
处的位,则返回
true
;否则结果为
false
。
bitIndex
- 位索引。
IndexOutOfBoundsException
- 如果指定的索引为负。
public BitSet get(int fromIndex, int toIndex)
fromIndex
- 第一个要包括位的索引。
toIndex
- 最后一个要包括位之后那个位的索引。
IndexOutOfBoundsException
- 如果
fromIndex 为负,或者
toIndex 为负,或者
fromIndex 大于
toIndex。
public int nextSetBit(int fromIndex)
true
的位的索引,这发生在指定的起始索引或之后的索引上。如果没有这样的位,则返回 -1。 要在
BitSet
中的
true
位上进行迭代,可以使用以下循环:
for(int i=bs.nextSetBit(0); i>=0; i=bs.nextSetBit(i+1)) { // operate on index i here }
fromIndex
- 开始检查的索引(包括)。
IndexOutOfBoundsException
- 如果指定的索引为负。
public int nextClearBit(int fromIndex)
false
的位的索引,这发生在指定的起始索引或之后的索引上。
fromIndex
- 开始检查的索引(包括)。
IndexOutOfBoundsException
- 如果指定的索引为负。
public int length()
BitSet
的“逻辑大小”:
BitSet
中最高设置位的索引加 1。如果
BitSet
中不包含任何设置位,则返回零。
BitSet
的逻辑大小。
public boolean isEmpty()
BitSet
中没有包含任何设置为
true
的位,则返回 ture。
BitSet
是否为空的 boolean 值。
public boolean intersects(BitSet set)
BitSet
中有设置为
true
的位,并且在此
BitSet
中也将其设置为
true
,则返回 ture。
set
- 要与其交叉的
BitSet
BitSet
与指定的
BitSet
是否存在交叉的 boolean 值。
public int cardinality()
BitSet
中设置为
true 的位数。
BitSet
中设置为
true 的位数。
public void and(BitSet set)
true
,并且位 set 参数中对应位的值也为
true
时才修改此位 set,这样其内每个位的值均为
true
。
set
- 一个位 set。
public void or(BitSet set)
true
,或者位 set 参数中对应位的值为
true
时才修改此位 set,这样其内该位的值为
true
。
set
- 一个位 set。
public void xor(BitSet set)
true
:
true
,并且参数对应位的值为 false
。 false
,并且参数对应位的值为 true
。
set
- 一个位 set。
public void andNot(BitSet set)
BitSet
中所有的位,其相应的位在指定的
BitSet
中已设置。
set
- 用来屏蔽此
BitSet
的
BitSet
。
public int hashCode()
BitSet
中已经设置的位。计算其哈希码的算法可以描述如下。
假定 BitSet
中的位将存储在一个 long
型的数组(比方说叫 words
)中,那么当且仅当表达式
((k>>6) < words.length) && ((words[k>>6] & (1L << (bit & 0x3F))) != 0)为 ture 时,才在
BitSet
中设置位
k
(对于非负的
k
值)。然后以下定义的
hashCode
方法才是实际算法的正确实现:
public int hashCode() { long h = 1234; for (int i = words.length; --i >= 0; ) { h ^= words[i] * (i + 1); } return (int)((h >> 32) ^ h); }注意,如果位的设置改变,则哈希码值也将发生更改。
重写 Object
的 hashCode
方法。
Object.equals(java.lang.Object)
,
Hashtable
public int size()
BitSet
表示位值时实际使用空间的位数。set 中值最大的元素是第 size - 1 个元素。
public boolean equals(Object obj)
null
,并且是一个与此位 set 有着完全相同的位 set 设置(为
true
)的
Bitset
对象时,结果才为
true
。也就是说,对于每个非负的
int
索引
k
,
((BitSet)obj).get(k) == this.get(k)一定为 ture。两个位 set 的当前大小不用进行比较。
重写 Object
的 equals
方法。
obj
- 要与之比较的对象。
true
;否则返回
false
。
size()
public Object clone()
BitSet
,生成一个与之相等的新
BitSet
。复制得到的是另一个位 set,它与此位 set 有着完全相同的、设置为
true
)的位。
重写 Object
的 clone
方法。
size()
public String toString()
BitSet
中包含的、处于已设置状态的每个位的索引,在结果中会包含这些索引的十进制表示形式。这些索引是按从低到高的顺序列出的、之间用 "," 分隔(一个逗号加一个空格),并用括号括起来,结果形成了一组整数的常用数学符号。
重写 Object
的 toString
方法。
示例:
BitSet drPepper = new BitSet();现在
drPepper.toString()
返回 "
{}
"。
drPepper.set(2);现在
drPepper.toString()
返回 "
{2}
"。
drPepper.set(4); drPepper.set(10);现在
drPepper.toString()
返回 "
{2, 4, 10}
"。