zoukankan      html  css  js  c++  java
  • Java BitSet 简单使用

    BitSet 简单说明

       在内存中是一串连续的内存空间,从0开始的正整数

       按位操作,每一位的值只有两种 0 或者 1,来表示某个值是否出现过。

    2:简单使用

        1 3 5 三个数放bitSet

       BitSet bitSet=new BitSet();

        bitSet.set(1);

    bitSet.set(3);

    bitSet.set(5);

        这时候bitSet的长度是 最大数+1=5+1=6

    for(int i=0;i<bitSet1.length();i=i+1) {

    System.out.print(bitSet1.get(i)+"-");

    得到的结果

    false-true-false-true-false-true

    0      1      2    3     4      5

    从结果可以看到,为true 说明这个位置上的数是存在的,默认每个位上为0,也就是false

    3:简单应用

       某品牌下有100个会员,会员的id,按入会先后 从1-100,

       会员标签:性别-女,偏爱颜色-白色,职业-程序员

       每个标签对应一个bitSet,每个bitSet中存储该标签对应的会员id

       性别-女标签下的会员有:2 66 88 90 32  bitSet1

       偏爱颜色-白色的会员有:66 89 55 22    bitSet2

       职业-程序员的会员有:88 99 90 22      bitSet3

       程序设计:

    (1) 从数据中查出性别为女的会员对应的id

    (2) id放入 bitSet.set(id);

       其他标签依次放入 不同的bitSet

       操作

    (1) 查询喜欢白色的女会员  两个bitSet1.and(bitSet2),再输出bitSet1,则得到66

    (2) 查询女会员和职业为程序员的会员 bitSet1.or(bitSet3),再输出bitSet1,则得到2,22,32,66,88,90,99,合并两个集合,并自动去重。

    4BitSet值持久化

       bitSet中二进制数,转化为十进制保存到数据库中,这样方便在其他的统计中使用。

       二进制过长的话,要使用BigInteger来转换。

       说明:若有10W个会员,二进制转换为十进制大概需要18秒;100W 30分钟

             会员超过10W的话 这种持久话就不太适合了,还没有找到好办法,继续探索。

    找到那个感觉 就算打开了那个脑洞

    本文来自博客园,作者:xiao~xiao,转载请注明原文链接:https://www.cnblogs.com/angin-iit/p/8857556.html

  • 相关阅读:
    springboot2 整合redis
    springboot2 整合mongodb
    Springboot2 Vue 前后端分离 整合打包 docker镜像
    nginx常见问题总结
    nginx配置中root和alias的区别
    nginx高级用法
    nginx搭建代理服务器与负载均衡器
    nginx常规扩展功能
    nginx典型官方模块解释
    nginx默认配置文件解释
  • 原文地址:https://www.cnblogs.com/angin-iit/p/8857556.html
Copyright © 2011-2022 走看看