java.util

接口
异常
错误
java.lang.Object
  继承者 java.util.BitSet
所有已实现的接口:
Serializable, Cloneable

public class BitSet
     
extends Object
implements Cloneable, Serializable

此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。

默认情况下,set 中所有位的初始值都是 false

每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。

除非另行说明,否则将 null 参数传递给 BitSet 中的任何方法都将导致 NullPointerException

在没有外部同步的情况下,多个线程操作一个 BitSet 是不安全的。

从以下版本开始:
JDK1.0
另请参见:
序列化表格

构造方法摘要
BitSet()
          创建一个新的位 set。
BitSet(int nbits)
          创建一个位 set,它的初始大小足以显式表示索引范围在 0nbits-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
 

构造方法详细信息

BitSet

public BitSet()
创建一个新的位 set。所有的位初始均为 false


BitSet

public BitSet(int nbits)
创建一个位 set,它的初始大小足以显式表示索引范围在 0nbits-1 的位。所有的位初始均为 false

参数:
nbits - 位 set 的初始大小。
抛出:
NegativeArraySizeException - 如果指定的初始大小为负。
方法详细信息

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 - 如果指定的索引为负。
从以下版本开始:
JDK1.0

set

public void set(int bitIndex,
                boolean value)
将指定索引处的位设置为指定的值。

参数:
bitIndex - 一个位索引。
value - 要设置的 boolean 值。
抛出:
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 - 如果指定的索引为负。
从以下版本开始:
JDK1.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)
返回指定索引处的位值。如果当前已设置了此 BitSet 中索引 bitIndex 处的位,则返回 true;否则结果为 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。 要在 BitSet 中的 true 位上进行迭代,可以使用以下循环:
for(int i=bs.nextSetBit(0); i>=0; i=bs.nextSetBit(i+1)) {
     // operate on index i here
 }

参数:
fromIndex - 开始检查的索引(包括)。
返回:
下一个已设置为 true 位的索引。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。
从以下版本开始:
1.4

nextClearBit

public int nextClearBit(int fromIndex)
返回第一个设置为 false 的位的索引,这发生在指定的起始索引或之后的索引上。

参数:
fromIndex - 开始检查的索引(包括)。
返回:
下一个已清除位的索引。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。
从以下版本开始:
1.4

length

public int length()
返回此 BitSet 的“逻辑大小”: BitSet 中最高设置位的索引加 1。如果 BitSet 中不包含任何设置位,则返回零。

返回:
BitSet 的逻辑大小。
从以下版本开始:
1.2

isEmpty

public boolean isEmpty()
如果此 BitSet 中没有包含任何设置为 true 的位,则返回 ture。

返回:
指示此 BitSet 是否为空的 boolean 值。
从以下版本开始:
1.4

intersects

public boolean intersects(BitSet set)
如果指定的 BitSet 中有设置为 true 的位,并且在此 BitSet 中也将其设置为 true,则返回 ture。

参数:
set - 要与其交叉的 BitSet
返回:
指示此 BitSet 与指定的 BitSet 是否存在交叉的 boolean 值。
从以下版本开始:
1.4

cardinality

public int cardinality()
返回此 BitSet 中设置为 true 的位数。

返回:
BitSet 中设置为 true 的位数。
从以下版本开始:
1.4

and

public void and(BitSet set)
对此目标位 set 和参数位 set 执行逻辑 操作。当且仅当目标位 set 的初始值均为 true,并且位 set 参数中对应位的值也为 true 时才修改此位 set,这样其内每个位的值均为 true

参数:
set - 一个位 set。

or

public void or(BitSet set)
对此位 set 和位 set 参数执行逻辑 操作。当且仅当此位 set 中某个位的值为 true,或者位 set 参数中对应位的值为 true 时才修改此位 set,这样其内该位的值为 true

参数:
set - 一个位 set。

xor

public void xor(BitSet set)
对此位 set 和位 set 参数执行逻辑 异或操作。当且仅当以下语句之一成立时才修改此位 set,这样其内某个位的值为 true
  • 位的初始值为 true,并且参数对应位的值为 false
  • 位的初始值为 false,并且参数对应位的值为 true

参数:
set - 一个位 set。

andNot

public void andNot(BitSet set)
清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。

参数:
set - 用来屏蔽此 BitSetBitSet
从以下版本开始:
JDK1.2

hashCode

public int hashCode()
返回此位 set 的哈希码值。哈希码只取决于此 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);
 }
注意,如果位的设置改变,则哈希码值也将发生更改。

重写 ObjecthashCode 方法。

覆盖:
Object 中的 hashCode
返回:
此位 set 的哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

size

public int size()
返回此 BitSet 表示位值时实际使用空间的位数。set 中值最大的元素是第 size - 1 个元素。

返回:
此位 set 中当前的位数。

equals

public boolean equals(Object obj)
将此对象与指定的对象进行比较。当且仅当参数不是 null,并且是一个与此位 set 有着完全相同的位 set 设置(为 true)的 Bitset 对象时,结果才为 true。也就是说,对于每个非负的 int 索引 k
((BitSet)obj).get(k) == this.get(k)
一定为 ture。两个位 set 的当前大小不用进行比较。

重写 Objectequals 方法。

覆盖:
Object 中的 equals
参数:
obj - 要与之比较的对象。
返回:
如果对象相同,则返回 true;否则返回 false
另请参见:
size()

clone

public Object clone()
复制此 BitSet,生成一个与之相等的新 BitSet。复制得到的是另一个位 set,它与此位 set 有着完全相同的、设置为 true)的位。

重写 Objectclone 方法。

覆盖:
Object 中的 clone
返回:
此位 set 的一个副本。
另请参见:
size()

toString

public String toString()
返回此位 set 的字符串表示形式。对于此 BitSet 中包含的、处于已设置状态的每个位的索引,在结果中会包含这些索引的十进制表示形式。这些索引是按从低到高的顺序列出的、之间用 "," 分隔(一个逗号加一个空格),并用括号括起来,结果形成了一组整数的常用数学符号。

重写 ObjecttoString 方法。

示例:

 BitSet drPepper = new BitSet();
现在 drPepper.toString() 返回 " {}"。

 drPepper.set(2);
现在 drPepper.toString() 返回 " {2}"。

 drPepper.set(4);
 drPepper.set(10);
现在 drPepper.toString() 返回 " {2, 4, 10}"。

覆盖:
Object 中的 toString
返回:
此位 set 的字符串表示形式。