- java.lang.Object
-
- java.util.BitSet
-
- 实现的所有接口
-
Serializable,Cloneable
public class BitSet extends Object implements Cloneable, Serializable
该类实现了一个根据需要增长的位向量。 位组的每个组件都具有boolean值。BitSet的位由非负整数索引。 可以检查,设置或清除各个索引位。 一个BitSet可用于通过逻辑AND,逻辑包含OR和逻辑异或运算来修改另一个BitSet的内容。默认情况下,集合中的所有位最初都具有值
false。每个位集都有一个当前大小,即当前位集使用的空间位数。 请注意,大小与位集的实现有关,因此它可能随实现而改变。 位集的长度与位集的逻辑长度有关,并且与实现无关地定义。
除非另有说明,否则将null参数传递给
BitSet任何方法BitSet将生成NullPointerException。如果没有外部同步,多线程使用
BitSet是不安全的。- 从以下版本开始:
- 1.0
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 voidand(BitSet set)使用参数位设置执行此目标位设置的逻辑 AND 。voidandNot(BitSet set)清除此BitSet的所有位,其相应位在指定的BitSet设置。intcardinality()返回此BitSet设置为true的BitSet。voidclear()将此BitSet中的所有位设置为false。voidclear(int bitIndex)将索引指定的位设置为false。voidclear(int fromIndex, int toIndex)将指定的fromIndex(含)到指定的toIndex(不包括)的位设置为false。Objectclone()克隆此BitSet会生成一个BitSet相等的新BitSet。booleanequals(Object obj)将此对象与指定的对象进行比较。voidflip(int bitIndex)将指定索引处的位设置为其当前值的补码。voidflip(int fromIndex, int toIndex)将指定的每一位fromIndex(含)到指定toIndex(独家)为其当前值的补码。booleanget(int bitIndex)返回具有指定索引的位的值。BitSetget(int fromIndex, int toIndex)返回一个新的BitSet由BitSet从fromIndex(含)到toIndex(独家)的位组成。inthashCode()返回此位集的哈希码值。booleanintersects(BitSet set)如果指定的BitSet任何位设置为truetrue在此BitSet中也设置为true,则返回true。booleanisEmpty()如果此BitSet包含设置为true位,则返回true。intlength()返回此BitSet的“逻辑大小”:BitSet中最高设置位的BitSet加1。intnextClearBit(int fromIndex)返回在指定的起始索引之上或之后发生的设置为false的第一个位的索引。intnextSetBit(int fromIndex)返回在指定的起始索引之上或之后发生的设置为true的第一个位的索引。voidor(BitSet set)使用位设置参数执行此位设置的逻辑 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实际使用的空间位数,以表示位值。IntStreamstream()返回此BitSet包含处于set状态的位的索引流。byte[]toByteArray()返回包含此位集中所有位的新字节数组。long[]toLongArray()返回包含此位集中所有位的新长数组。StringtoString()返回此位集的字符串表示形式。static BitSetvalueOf(byte[] bytes)返回包含给定字节数组中所有位的新位集。static BitSetvalueOf(long[] longs)返回包含给定long数组中所有位的新位集。static BitSetvalueOf(ByteBuffer bb)返回一个新的位集,其中包含位置和限制之间给定字节缓冲区中的所有位。static BitSetvalueOf(LongBuffer lb)返回一个新的位集,其中包含位置和限制之间给定长缓冲区中的所有位。voidxor(BitSet set)使用位设置参数执行此位设置的逻辑 XOR 。
-
-
-
构造方法详细信息
-
BitSet
public BitSet()
创建一个新的位集。 所有位最初都是false。
-
BitSet
public BitSet(int nbits)
创建一个位集,其初始大小足以显式表示索引范围为0到nbits-1。 所有位最初都是false。- 参数
-
nbits- 位集的初始大小 - 异常
-
NegativeArraySizeException- 如果指定的初始大小为负数
-
-
方法详细信息
-
valueOf
public static BitSet valueOf(long[] longs)
返回包含给定long数组中所有位的新位集。更确切地说,
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
public static BitSet valueOf(LongBuffer lb)
返回一个新的位集,其中包含位置和限制之间给定长缓冲区中的所有位。更确切地说,
BitSet.valueOf(lb).get(n) == ((lb.get(lb.position()+n/64) & (1L<<(n%64))) != 0)
为所有n < 64 * lb.remaining()。此方法不修改长缓冲区,并且位集不保留对缓冲区的引用。
- 参数
-
lb- 一个长缓冲区,包含位置和限制之间的位序列的小端表示,用作新位集的初始位 - 结果
-
BitSet包含指定范围内缓冲区中的所有位 - 从以下版本开始:
- 1.7
-
valueOf
public static BitSet valueOf(byte[] bytes)
返回包含给定字节数组中所有位的新位集。更确切地说,
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
public static BitSet valueOf(ByteBuffer bb)
返回一个新的位集,其中包含位置和限制之间给定字节缓冲区中的所有位。更确切地说,
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)
返回具有指定索引的位的值。 该值是true如果与索引的比特bitIndex在该当前设置BitSet; 否则,结果是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。遍历
true位在BitSet,请使用以下循环:for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) { // operate on index i here if (i == Integer.MAX_VALUE) { break; // or (i+1) would overflow } }- 参数
-
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。遍历
true位在BitSet,请使用以下循环:for (int i = bs.length(); (i = bs.previousSetBit(i-1)) >= 0; ) { // operate on index i here }- 参数
-
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加1。 如果BitSet包含设置位,则返回零。- 结果
-
这个
BitSet的逻辑大小 - 从以下版本开始:
- 1.2
-
isEmpty
public boolean isEmpty()
如果此BitSet包含设置为true位,则返回true。- 结果
-
boolean指示此
BitSet是否为空 - 从以下版本开始:
- 1.4
-
intersects
public boolean intersects(BitSet set)
如果指定的BitSet任何位设置为true,并且在此BitSet中也设置为true,则返回true。- 参数
-
set-BitSet与...相交 - 结果
-
boolean指示此
BitSet是否与指定的BitSet相交 - 从以下版本开始:
- 1.4
-
cardinality
public int cardinality()
返回此BitSet设置为true的BitSet。- 结果
-
比特设置为数量
true本BitSet - 从以下版本开始:
- 1.4
-
and
public void and(BitSet set)
使用参数位设置执行此目标位设置的逻辑AND 。 修改此位集,以使其中的每个位具有值true当且仅当它们最初都具有值true且位集参数中的相应位也具有值true。- 参数
-
set- 有点集
-
or
public void or(BitSet set)
使用位设置参数执行此位设置的逻辑OR 。 修改此位集,使其中的位具有值true当且仅当它已经具有值true或位集参数中的相应位具有值true。- 参数
-
set- 有点集
-
xor
public void xor(BitSet set)
使用位设置参数执行此位设置的逻辑XOR 。 修改此位集,以便当且仅当以下语句之一成立时,其中的位具有值true:- 该位最初的值为
true,参数中的相应位的值为false。 - 该位最初的值为
false,参数中的相应位的值为true。
- 参数
-
set- 有点集
- 该位最初的值为
-
andNot
public void andNot(BitSet set)
清除此BitSet的所有位,其相应位在指定的BitSet设置。- 参数
-
set-该BitSet,用以掩盖这个BitSet - 从以下版本开始:
- 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); }- 重写:
-
hashCode在课程Object - 结果
- 此位集的哈希码值
- 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
size
public int size()
返回此BitSet实际使用的空间位数,以表示位值。 集合中的最大元素是size - 1st元素。- 结果
- 此位设置中当前的位数
-
equals
public boolean equals(Object obj)
将此对象与指定的对象进行比较。 结果是true当且仅当参数不是null并且是Bitset对象时,该位设置为true的位设置true。 也就是说,对于每个非负int索引k,((BitSet)obj).get(k) == this.get(k)必须是真的。 不比较两个位组的当前大小。
-
clone
public Object clone()
克隆此BitSet会生成一个BitSet相等的新BitSet。 位集的克隆是另一个位集,其位设置与此位设置为true完全相同。
-
toString
public String 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
public IntStream stream()
返回此BitSet包含处于set状态的位的索引流。 索引按从低到高的顺序返回。 流的大小是设置状态中的位数,等于cardinality()方法返回的值。当终端流操作开始时,流绑定到该位集(具体地,流的分裂器是late-binding )。 如果在该操作期间修改了位集,则结果是未定义的。
- 结果
- 表示集合索引的整数流
- 从以下版本开始:
- 1.8
-
-