1:Bitset介绍

BitSet 是用于存储二进制位和对二进制进行操作的 Java 数据结构,

此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。

默认情况下,set 中所有位的初始值都是 false。 

2:优化空间

在程序runtime时,我们经常需要使用数组来记住程序的运行状态,并且根据这些状态及时 对数据做出更新,一般有以下处理办法

  • 使用 Int [] state=new int[22]; 保存状态
  • 使用 boolean [] state = new boolean[22] 保存状态

分析可知,1byte=8bit  int占用4个字节,如果考虑使用bit直接存储状态 ,将会大大节约时间, 不过在改变你的编程习惯之前,你应该清楚 我们如何保存状态,以及对于状态的操作

3:Bitset常用api

构建

BitSet()
          创建一个新的位 set。 默认64
BitSet(int nbits)
          创建一个位 set,它的初始大小足以显式表示索引范围在 0 到 nbits-1 的位。  一般要求给出大小

 操作

更新:  
void set
(int bitIndex) 将指定索引处的位设置为 truevoid set(int bitIndex, boolean value) 将指定索引处的位设置为指定的值。 void set(int fromIndex, int toIndex) 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 truevoid set(int fromIndex, int toIndex, boolean value) 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。
获取:

boolean(int bitIndex)
          返回指定索引处的位值。
 (int fromIndex,int toIndex)
          返回一个新的 BitSet,它由此 BitSet 中从fromIndex(包括)到 toIndex(不包括)范围内的位组成。
翻转:
boolean(int bitIndex)
          返回指定索引处的位值。
 (int fromIndex,int toIndex)
          返回一个新的 BitSet,它由此 BitSet 中从fromIndex(包括)到 toIndex(不包括)范围内的位组成。

删除

 void()
          将此 BitSet 中的所有位设置为 false
 void(int bitIndex)
          将索引指定处的位设置为 false
 void(int fromIndex,int toIndex)
          将指定的 fromIndex(包括)到指定的toIndex(不包括)范围内的位设置为 false

长度:

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


int()
          返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。
 
 int()
          返回此 BitSet 表示位值时实际使用空间的位数。
重要: 遍历相关:


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

4.BitSet 应用举例

01-15 15:40