- 所有已实现的接口:
-
Serializable
,Cloneable
boolean
值。位集的位由非负整数索引。可以检查、设置或清除位集中的单个索引位。一个BitSet
可以通过逻辑AND、逻辑包含OR和逻辑排他OR操作来修改另一个BitSet
的内容。
默认情况下,集合中的所有位最初都具有值false
。
每个位集都有一个当前大小,即当前位集使用的位空间数量。请注意,大小与位集的实现相关,因此它可能随着实现而改变。位集的长度与位集的逻辑长度相关,并且独立于实现而定义。
除非另有说明,否则将空参数传递给BitSet
中的任何方法将导致NullPointerException
。
BitSet
在没有外部同步的情况下不适用于多线程使用。
- 自从:
- 1.0
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
对该目标位集与参数位集执行逻辑AND操作。void
清除在指定BitSet
中相应位设置的所有位。int
返回在此BitSet
中设置为true
的位数。void
clear()
将此BitSet
中的所有位设置为false
。void
clear
(int bitIndex) 将由索引指定的位设置为false
。void
clear
(int fromIndex, int toIndex) 将从指定的fromIndex
(包括)到指定的toIndex
(不包括)的位设置为false
。clone()
克隆此BitSet
会产生一个等于它的新BitSet
。boolean
将此对象与指定对象进行比较。void
flip
(int bitIndex) 将指定索引处的位设置为其当前值的补码。void
flip
(int fromIndex, int toIndex) 将从指定的fromIndex
(包括)到指定的toIndex
(不包括)的每个位设置为其当前值的补码。boolean
get
(int bitIndex) 返回指定索引处的位的值。get
(int fromIndex, int toIndex) 返回由此BitSet
中的位从fromIndex
(包括)到toIndex
(不包括)组成的新BitSet
。int
hashCode()
返回此位集的哈希码值。boolean
intersects
(BitSet set) 如果指定的BitSet
中有任何位设置为true
,并且这些位在此BitSet
中也设置为true
,则返回true
。boolean
isEmpty()
如果此BitSet
不包含设置为true
的位,则返回true
。int
length()
返回此BitSet
的“逻辑大小”:位集中最高设置位的索引加一。int
nextClearBit
(int fromIndex) 返回指定起始索引之后设置为false
的第一个位的索引。int
nextSetBit
(int fromIndex) 返回指定起始索引之后设置为true
的第一个位的索引。void
对此位集与位集参数执行逻辑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
中使用的位空间数量。stream()
返回此BitSet
中包含处于设置状态的位的索引流。byte[]
返回一个包含此位集中所有位的新字节数组。long[]
返回一个包含此位集中所有位的新长整型数组。toString()
返回此位集的字符串表示形式。static BitSet
valueOf
(byte[] bytes) 返回一个包含给定字节数组中所有位的新位集。static BitSet
valueOf
(long[] longs) 返回一个包含给定长整型数组中所有位的新位集。static BitSet
valueOf
(ByteBuffer bb) 返回一个包含给定字节缓冲区中位的新位集,介于其位置和限制之间。static BitSet
valueOf
(LongBuffer lb) 返回一个包含给定长整型缓冲区中位的新位集,介于其位置和限制之间。void
对此位集与位集参数执行逻辑XOR操作。
-
Constructor Details
-
BitSet
public BitSet()创建一个新的位集。所有位最初都是false
。 -
BitSet
public BitSet(int nbits) 创建一个位集,其初始大小足够大,可以明确表示索引范围内的位,从0
到nbits-1
。所有位最初都是false
。- 参数:
-
nbits
- 位集的初始大小 - 抛出:
-
NegativeArraySizeException
- 如果指定的初始大小为负数
-
-
Method Details
-
valueOf
返回一个包含给定长整型数组中所有位的新位集。更准确地说,
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
返回一个包含给定长整型缓冲区中位的新位集。更准确地说,
BitSet.valueOf(lb).get(n) == ((lb.get(lb.position()+n/64) & (1L<<(n%64))) != 0)
对于所有n < 64 * lb.remaining()
。此方法不会修改长整型缓冲区,并且位集不会保留对缓冲区的引用。
- 参数:
-
lb
- 包含要用作新位集的初始位的位序列的小端表示的长整型缓冲区,介于其位置和限制之间 - 返回:
-
包含缓冲区中指定范围内所有位的
BitSet
- 自从:
- 1.7
-
valueOf
返回一个包含给定字节数组中所有位的新位集。更准确地说,
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
返回一个包含给定字节缓冲区中位的新位集。更准确地说,
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) 返回具有指定索引的位的值。如果在此BitSet
中索引为bitIndex
的位当前设置为true
,则值为true
;否则,结果为false
。- 参数:
-
bitIndex
- 位索引 - 返回:
- 具有指定索引的位的值
- 抛出:
-
IndexOutOfBoundsException
- 如果指定的索引为负数
-
get
返回由此BitSet
中从fromIndex
(包括)到toIndex
(不包括)的位组成的新BitSet
。- 参数:
-
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)) { // 在此处操作索引 i if (i == Integer.MAX_VALUE) { break; // 或者 (i+1) 会溢出 } }
- 参数:
-
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
。要遍历
BitSet
中的true
位,请使用以下循环:for (int i = bs.length(); (i = bs.previousSetBit(i-1)) >= 0; ) { // 在此处操作索引 i }
- 参数:
-
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
如果指定的BitSet
中有任何位设置为true
,并且在此BitSet
中也设置为true
,则返回true
。- 参数:
-
set
- 要与之求交集的BitSet
- 返回:
-
指示此
BitSet
是否与指定的BitSet
相交的布尔值 - 自版本:
- 1.4
-
cardinality
public int cardinality()返回此BitSet
中设置为true
的位数。- 返回:
-
此
BitSet
中设置为true
的位数 - 自版本:
- 1.4
-
and
对此目标位集执行与参数位集的逻辑AND操作。修改此位集,使得其中的每个位的值仅当它最初的值为true
且参数位集中的相应位也为true
时才为true
。- 参数:
-
set
- 一个位集
-
or
对此位集执行与参数位集的逻辑OR操作。修改此位集,使得其中的位仅当它已经为true
或参数位集中的相应位为true
时才为true
。- 参数:
-
set
- 一个位集
-
xor
对此位集执行与参数位集的逻辑XOR操作。修改此位集,使得其中的位仅当以下语句之一成立时才为true
:- 该位最初为
true
,并且参数中的相应位为false
。 - 该位最初为
false
,并且参数中的相应位为true
。
- 参数:
-
set
- 一个位集
- 该位最初为
-
andNot
清除此BitSet
中对应位在指定BitSet
中设置的所有位。- 参数:
-
set
- 用于屏蔽此BitSet
的BitSet
- 自 JDK 版本:
- 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); }
-
size
public int size()返回实际用于表示位值的位集中使用的位数。集合中的最大元素是大小 - 1 的元素。- 返回:
- 当前位集中的位数
-
equals
将此对象与指定对象进行比较。结果为true
当且仅当参数不为null
且为具有与此位集完全相同的位设置为true
的BitSet
对象。也就是说,对于每个非负的int
索引k
,((BitSet)obj).get(k) == this.get(k)
必须为真。不比较两个位集的当前大小。 -
clone
克隆此BitSet
会产生一个等于它的新BitSet
。位集的克隆是另一个位集,其具有与此位集完全相同的位设置为true
。 -
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
返回此BitSet
中包含处于设置状态的位的索引流。索引按从最低到最高的顺序返回。流的大小是处于设置状态的位数,等于cardinality()
方法返回的值。当终端流操作开始时(具体来说,流的分割器是延迟绑定),流绑定到此位集。如果在该操作期间修改了位集,则结果是未定义的。
- 返回:
- 代表设置索引的整数流
- 自 JDK 版本:
- 1.8
-