BitSet大小可动态改变, 取值为true或false的位集合,用于表示一组布尔标志。
->此类实现了一个按需增长的位向量。位 set 的每个组件(index,value)都有一个 boolean 值。
->用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。
->通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。
->默认情况下,set 中所有位的初始值都是 false。
->
除非另行说明,否则将 null 参数传递给 BitSet 中的任何方法都将导致 NullPointerException。 在没有外部同步的情况下,多个线程操作一个 BitSet 是不安全的。
BitSet实际是由“二进制位”构成的一个Vector。如果希望高效率地保存大量“开-关”信息,就应使用BitSet。
BitSet的最小长度是一个长整数(Long)的长度:64位。这意味着假如我们准备保存比这更小的数据,如8位数据,那么BitSet就显得浪费了
(1) 构造函数: BitSet() or BitSet(int nbits)
new一个BitSet(950)并不等于建立一个950大小的bs ,只是说构建出来的bs初始大小至少能容纳950个bit,大小永远是系统控制的。而且他的大小是64的倍数,就算BitSet(1),他的大小也是64。
- public static void main(String args[]) {
-
- BitSet bs=new BitSet(950);
- bs.set(0);
- bs.set(1);
bs.get(0); - System.out.println("返回以最高位为true做结束的长度: "+bs.length());
- System.out.println("bs.size: "+bs.size());
- }
输出:
true
- 返回以最高位为true做结束的长度: 2
- bs.size: 960 64的倍数
(2) 一些方法
- // 位与
- void and(BitSet set)
- // 参数set先取反,再与
- void andNot(BitSet set)
- // 位或
- void or(BitSet set)
- // 异或
- void xor(BitSet set)
- // 该位取反
- void flip(int bitIndex)
- // 一片区取反,前闭后开
- void flip(int fromIndex, int toIndex)
-
- // 如果有一个位两者都为true,返回true
- boolean intersects(BitSet set)
-
- // 设置该位为true
- void set(int bitIndex)
- void set(int bitIndex, boolean value)
- // 设置一片区为true,前闭后开
- void set(int fromIndex, int toIndex)
- void set(int fromIndex, int toIndex, boolean value)
-
- // 返回指定位置的值
- boolean get(int bitIndex)
- // 返回一个BitSet子集,前闭后开
- BitSet get(int fromIndex, int toIndex)
-
- // 设置所有位为false
- void clear()
-
- // 返回从指定位置开始的第一个为true的位置,否则返回 -1
- int nextSetBit(int fromIndex)
- // 返回从指定位置开始的第一个为false的位置
- int nextClearBit(int fromIndex)
-
- // 返回位为true的个数
- int cardinality()
-
- // 返回以最高位为true做结束的长度
- int length()
-
- // 如果没有一位为true,返回true
- boolean isEmpty()
例子: 标明一个字符串中用了哪些字符
- package itcast.bloofilter;
- import java.util.BitSet;
- public class TestBitSet {
- private BitSet used = new BitSet();
- public TestBitSet(String str) {
- for (int i = 0; i < str.length(); i++)
- {
- used.set(str.charAt(i)); // set bit for char
- }
- }
- public String toString() {
- String desc = "[";
- int size = used.size();
- //构造方法把字符的ascii编码作为index,把BitSet置为true,把它取出来逆向转回字符
- for (int i = 0; i < size; i++) {
- if (used.get(i))
- desc += (char) i;
- }
- return desc + "]";
- }
- public static void main(String args[]) {
- TestBitSet w = new TestBitSet("How do you do");
- System.out.println(w);
-
- }
- }
- 输出:[ Hdouwy]
阅读(573) | 评论(0) | 转发(0) |