【原创】MultiBitSet-BitSet扩展
来源:互联网 发布:斗直播软件 编辑:程序博客网 时间:2024/06/04 20:14
1.BitSet
BitSet其本质是01序列,0|1 两种状态可以表示 “是|否”、“开|关”等。一个01序列,例如 0110101001。可以用来表示一组数据的状态信息例如连续的UserId,0表示男生,1表示女生。假设UserId是从6666开始的,那么上面的01序列可以表达的信息是:【6666,男生】,【6667,女生】,【6668,女生】......这样10个bit位就能表达如此多的信息,效果上和Map<UserId,Boolean>一致的。当数据量小的时候,可以简单的通过Map实现,但是当数据量极大的时候,可能会导致无法加载所有的ID到内存中,这个时候BitSet就非常有用啦。
假设ID 4个字节表示,Boolean1个字节,那么压缩比就是 40:1,这个相当可观的。
缺点一:从上面的结论可以看出一个问题,如果ID稀疏将导致内存浪费。假设一个极限情况只有两个ID,1和10000.那么bit序列表示为10000….(9998个0)....1那么中间的9998个0都是浪费了,还不如map内存占用少。
所以需要根据实际情况选择。
缺点二:原生的API只能支持0|1,有时候需要更多的信息,比如会员的来源,可能有10几种类型。当然最简单的情况维护10几个BitSet,每一个BitSet维护一种类型的会员信息,每次遍历全部BitSet查询。可以看出这种方式不够优雅,如果每一位能够表达更多的信息岂不是更好?
2.MultiBitSet
1.介绍
MultiBitSet扩展BitSet使其支持多位表示一位,3个物理bit表示逻辑上的1bit,那么“1位”就能表示八种状态。本人在实现的时候,基本上实现了BitSet的接口,使用起来非常方便。
Demo
2.API
3.GitHub 地址
https://github.com/lepdou/common-lang/blob/master/src/main/java/org/lepdou/common/MultiBitSet.java
0 0
- 【原创】MultiBitSet-BitSet扩展
- bitset
- bitset
- BitSet
- bitset
- bitset
- BitSet
- bitset
- bitset
- bitset
- bitset
- bitset
- BitSet
- bitset
- bitset
- Bitset
- Bitset
- bitset
- C++ 模板实例化
- ios 修改navigationBar标题颜色swift版
- P51 第二章 第六题 潘璠
- java中线程的协作sleep yield wait 和 notify
- 追逐自己的梦想----------辅助制作第二十七课:身上装备更换的分析与实现
- 【原创】MultiBitSet-BitSet扩展
- Android结构各层
- restrict关键字
- 简单选择排序
- java中50个关键字总结经验和分享里面的定义
- HDU 2181 哈密顿绕行世界问题
- 解析php curl_setopt 函数的相关应用及介绍
- LeetCode题解:excel-sheet-column-number
- java开发笔记——classLoader