返回介绍

java.util 类 BitSet

发布于 2019-10-04 09:51:26 字数 20315 浏览 850 评论 0 收藏 0

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(intnbits)

创建一个位 set,它的初始大小足以显式表示索引范围在 0nbits-1 的位。

方法摘要
voidand(BitSetset)

对此目标位 set 和参数位 set 执行逻辑操作。

voidandNot(BitSetset)

清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。

intcardinality()

返回此 BitSet 中设置为 true 的位数。

voidclear()

将此 BitSet 中的所有位设置为 false

voidclear(intbitIndex)

将索引指定处的位设置为 false

voidclear(intfromIndex, inttoIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 false

Objectclone()

克隆此 BitSet ,生成一个与之相等的新 BitSet

booleanequals(Objectobj)

将此对象与指定的对象进行比较。

voidflip(intbitIndex)

将指定索引处的位设置为其当前值的补码。

voidflip(intfromIndex, inttoIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。

booleanget(intbitIndex)

返回指定索引处的位值。

BitSetget(intfromIndex, inttoIndex)

返回一个新的 BitSet ,它由此 BitSet 中从 fromIndex (包括)到 toIndex (不包括)范围内的位组成。

inthashCode()

返回此位 set 的哈希码值。

booleanintersects(BitSetset)

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

booleanisEmpty()

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

intlength()

返回此 BitSet 的“逻辑大小”: BitSet 中最高设置位的索引加 1。

intnextClearBit(intfromIndex)

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

intnextSetBit(intfromIndex)

返回第一个设置为 true 的位的索引,这发生在指定的起始索引或之后的索引上。

voidor(BitSetset)

对此位 set 和位 set 参数执行逻辑操作。

voidset(intbitIndex)

将指定索引处的位设置为 true

voidset(intbitIndex, booleanvalue)

将指定索引处的位设置为指定的值。

voidset(intfromIndex, inttoIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 true

voidset(intfromIndex, inttoIndex, booleanvalue)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。

intsize()

返回此 BitSet 表示位值时实际使用空间的位数。

StringtoString()

返回此位 set 的字符串表示形式。

voidxor(BitSetset)

对此位 set 和位 set 参数执行逻辑异或操作。

从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait

构造方法详细信息

BitSet

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

BitSet

public BitSet(intnbits)
创建一个位 set,它的初始大小足以显式表示索引范围在 0nbits-1 的位。所有的位初始均为 false
参数:
nbits - 位 set 的初始大小。
抛出:
NegativeArraySizeException - 如果指定的初始大小为负。

方法详细信息

flip

public void flip(intbitIndex)
将指定索引处的位设置为其当前值的补码。
参数:
bitIndex - 要翻转位的索引。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。
从以下版本开始:
1.4

flip

public void flip(intfromIndex,
                 inttoIndex)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。
参数:
fromIndex - 第一个要翻转位的索引。
toIndex - 最后一个要翻转位之后那个位的索引。
抛出:
IndexOutOfBoundsException - 如果 fromIndex 为负,或者 toIndex 为负,或者 fromIndex 大于 toIndex
从以下版本开始:
1.4

set

public void set(intbitIndex)
将指定索引处的位设置为 true
参数:
bitIndex - 一个位索引。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。
从以下版本开始:
JDK1.0

set

public void set(intbitIndex,
                booleanvalue)
将指定索引处的位设置为指定的值。
参数:
bitIndex - 一个位索引。
value - 要设置的 boolean 值。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。
从以下版本开始:
1.4

set

public void set(intfromIndex,
                inttoIndex)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 true
参数:
fromIndex - 第一个要设置位的索引。
toIndex - 最后一个要设置位之后那个位的索引。
抛出:
IndexOutOfBoundsException - 如果 fromIndex 为负,或者 toIndex 为负,或者 fromIndex 大于 toIndex
从以下版本开始:
1.4

set

public void set(intfromIndex,
                inttoIndex,
                booleanvalue)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。
参数:
fromIndex - 第一个要设置位的索引。
toIndex - 最后一个要设置位之后那个位的索引
value - 所选择的位上要设置的值
抛出:
IndexOutOfBoundsException - 如果 fromIndex 为负,或者 toIndex 为负,或者 fromIndex 大于 toIndex
从以下版本开始:
1.4

clear

public void clear(intbitIndex)
将索引指定处的位设置为 false
参数:
bitIndex - 要清除位的索引。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。
从以下版本开始:
JDK1.0

clear

public void clear(intfromIndex,
                  inttoIndex)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 false
参数:
fromIndex - 第一个要清除位的索引。
toIndex - 最后一个要清除位之后那个位的索引。
抛出:
IndexOutOfBoundsException - 如果 fromIndex 为负,或者 toIndex 为负,或者 fromIndex 大于 toIndex
从以下版本开始:
1.4

clear

public void clear()
将此 BitSet 中的所有位设置为 false
从以下版本开始:
1.4

get

public boolean get(intbitIndex)
返回指定索引处的位值。如果当前已设置了此 BitSet 中索引 bitIndex 处的位,则返回 true ;否则结果为 false
参数:
bitIndex - 位索引。
返回:
指定索引处的位值。
抛出:
IndexOutOfBoundsException - 如果指定的索引为负。

get

public BitSet get(intfromIndex,
                  inttoIndex)
返回一个新的 BitSet ,它由此 BitSet 中从 fromIndex (包括)到 toIndex (不包括)范围内的位组成。
参数:
fromIndex - 第一个要包括位的索引。
toIndex - 最后一个要包括位之后那个位的索引。
返回:
包含此 BitSet 某个范围内各位的新 BitSet
抛出:
IndexOutOfBoundsException - 如果 fromIndex 为负,或者 toIndex 为负,或者 fromIndex 大于 toIndex
从以下版本开始:
1.4

nextSetBit

public int nextSetBit(intfromIndex)
返回第一个设置为 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(intfromIndex)
返回第一个设置为 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(BitSetset)
如果指定的 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(BitSetset)
对此目标位 set 和参数位 set 执行逻辑操作。当且仅当目标位 set 的初始值均为 true ,并且位 set 参数中对应位的值也为 true 时才修改此位 set,这样其内每个位的值均为 true
参数:
set - 一个位 set。

or

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

xor

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

andNot

public void andNot(BitSetset)
清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。
参数:
set - 用来屏蔽此 BitSetBitSet
从以下版本开始:
JDK1.2

hashCode

public int hashCode()
返回此位 set 的哈希码值。哈希码只取决于此 BitSet 中已经设置的位。计算其哈希码的算法可以描述如下。

假定 BitSet 中的位将存储在一个 long 型的数组(比方说叫 bits )中,那么当且仅当表达式

((k>>6) < bits.length) && ((bits[k>>6] & (1L << (bit & 0x3F))) != 0)

为 ture 时,才在 BitSet 中设置位 k (对于非负的 k 值)。然后以下定义的 hashCode 方法才是实际算法的正确实现:

 public int hashCode() {
      long h = 1234;
      for (int i = bits.length; --i >= 0; ) {
           h ^= bits[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(Objectobj)
将此对象与指定的对象进行比较。当且仅当参数不是 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 的字符串表示形式。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文