bitset的优点是节省空间,位运算非常方便等。
bitset使用例子
例如,最经典的多维度筛选,用数据库效率很低,但是bitset很容易。
代码:
public static void demo1(){
// 张三 id 1 安卓 男
// 李四 id 2 苹果 女
// 王五 id 3 安卓 女
BitSet bitsAndroid = new BitSet(16); // 安卓
BitSet bitsIos = new BitSet(16); // ios
BitSet bitsMale = new BitSet(16); // 男
BitSet bitsFemale = new BitSet(16); // 女
bitsAndroid.set(1);
bitsAndroid.set(3);
bitsIos.set(2);
bitsMale.set(1);
bitsFemale.set(2);
bitsFemale.set(3);
// 筛选使用android的男性
bitsAndroid.and(bitsMale); // 运算之后不会生成新的bitset,而是改变当前set
logger.info("筛选使用android的男性:{}",bitsAndroid);
}
java自带的bitset的缺点
先看一段代码:
public static void demo2(){
BitSet bitSet=new BitSet();
bitSet.set(20000);
logger.info("length:{}",bitSet.length()); // 长度 20001
logger.info("cardinality:{}",bitSet.cardinality()); // 基数 1
}
bitset中只有一个元素,但是长度却达到了20001,很明显太大了。
所以建议用BitmapContainer、RoaringBitmap。