- 所有已实现的接口:
-
Serializable,Cloneable
boolean值。位集的位由非负整数索引。可以检查、设置或清除位集中的单个索引位。一个BitSet可以通过逻辑AND、逻辑包含OR和逻辑排他OR操作来修改另一个BitSet的内容。
默认情况下,集合中的所有位最初都具有值false。
每个位集都有一个当前大小,即当前位集使用的位空间数量。请注意,大小与位集的实现相关,因此它可能随着实现而改变。位集的长度与位集的逻辑长度相关,并且独立于实现而定义。
除非另有说明,否则将空参数传递给BitSet中的任何方法将导致NullPointerException。
BitSet在没有外部同步的情况下不适用于多线程使用。
- 自从:
- 1.0
- 参见:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid对该目标位集与参数位集执行逻辑AND操作。void清除在指定BitSet中相应位设置的所有位。int返回在此BitSet中设置为true的位数。voidclear()将此BitSet中的所有位设置为false。voidclear(int bitIndex) 将由索引指定的位设置为false。voidclear(int fromIndex, int toIndex) 将从指定的fromIndex(包括)到指定的toIndex(不包括)的位设置为false。clone()克隆此BitSet会产生一个等于它的新BitSet。boolean将此对象与指定对象进行比较。voidflip(int bitIndex) 将指定索引处的位设置为其当前值的补码。voidflip(int fromIndex, int toIndex) 将从指定的fromIndex(包括)到指定的toIndex(不包括)的每个位设置为其当前值的补码。booleanget(int bitIndex) 返回指定索引处的位的值。get(int fromIndex, int toIndex) 返回由此BitSet中的位从fromIndex(包括)到toIndex(不包括)组成的新BitSet。inthashCode()返回此位集的哈希码值。booleanintersects(BitSet set) 如果指定的BitSet中有任何位设置为true,并且这些位在此BitSet中也设置为true,则返回true。booleanisEmpty()如果此BitSet不包含设置为true的位,则返回true。intlength()返回此BitSet的“逻辑大小”:位集中最高设置位的索引加一。intnextClearBit(int fromIndex) 返回指定起始索引之后设置为false的第一个位的索引。intnextSetBit(int fromIndex) 返回指定起始索引之后设置为true的第一个位的索引。void对此位集与位集参数执行逻辑OR操作。intpreviousClearBit(int fromIndex) 返回指定起始索引之前设置为false的最近位的索引。intpreviousSetBit(int fromIndex) 返回指定起始索引之前设置为true的最近位的索引。voidset(int bitIndex) 将指定索引处的位设置为true。voidset(int bitIndex, boolean value) 将指定索引处的位设置为指定值。voidset(int fromIndex, int toIndex) 将从指定的fromIndex(包括)到指定的toIndex(不包括)的位设置为true。voidset(int fromIndex, int toIndex, boolean value) 将从指定的fromIndex(包括)到指定的toIndex(不包括)的位设置为指定值。intsize()返回实际用于表示位值的此BitSet中使用的位空间数量。stream()返回此BitSet中包含处于设置状态的位的索引流。byte[]返回一个包含此位集中所有位的新字节数组。long[]返回一个包含此位集中所有位的新长整型数组。toString()返回此位集的字符串表示形式。static BitSetvalueOf(byte[] bytes) 返回一个包含给定字节数组中所有位的新位集。static BitSetvalueOf(long[] longs) 返回一个包含给定长整型数组中所有位的新位集。static BitSetvalueOf(ByteBuffer bb) 返回一个包含给定字节缓冲区中位的新位集,介于其位置和限制之间。static BitSetvalueOf(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
-