java自带bitset工具类


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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值