java的BitSet类学习。
BitSet bs = new BitSet();
System.out.println("bs.size==" + bs.size());
Integer val = 1;
//int的size是4个字节
System.out.println(val.SIZE);
bs.set(0, true);
bs.set(1,false);
bs.set(2,true);
bs.set(3,true);
bs.set(4, false);
System.out.println(bs.size());
//存放第65个数,由于超过了64,所以自动增加了一倍,变成了最大为128
bs.set(64, true);
System.out.println(bs.size());
//存放第129个数,由于超过了128,所以自动增加了一倍,变成了最大为256
bs.set(128, true);
System.out.println(bs.size());
//这里打印出了正确的true和false值
System.out.println(bs.get(0));
System.out.println(bs.get(1));
System.out.println(bs.get(2));
System.out.println(bs.get(3));
bs = new BitSet();
//这里所占用的空间就有32*6=192
int[] prodIds = {3, 24, 45, 42, 1, 7};
System.out.println(prodIds.length);
int len = prodIds.length;
for(int i = 0; i < len; i++){
bs.set(prodIds[i], true);
}
//而这里用了64位就表达了上面的数组,在某些算法里面会得到很大的优化,对于数据存放
System.out.println(bs.size());
int size = bs.size();
for(int i = 0; i < size; i++){
if(bs.get(i)){
System.out.println(i);
}
}
打印输出结果:
bs.size==64
32
64
128
256
true
false
true
true
6
64
1
3
7
24
42
45
总结
BitSet适合用于一些需要用空间换取时间的数据结构,算法。
缺点是不能代表相同的数,比如数组含有两个42时,只能保存一个。