为何RoaringBitmap能成为Java里面事实上的位操作的标准结构

背景

说道位操作的数据结构,我们知道java中的BitSet,RoaringBitmap等,但是事实上,由于BitSet等结构的缺陷,比如当数值很大时占用的内存甚至超过使用整数数组存储整数本身,所以一般我们都会使用RoaringBitmap,那么RoaringBitmap如何做到兼顾了存储性能和操作性能呢?

RoaringBitmap位操作存储优势

先看下RoaringBitmap的结构图:
在这里插入图片描述
总结下RoaringBitmap作为位操作存储的首选的两个要点:
1.RoaringBitmap存储某个整数时,首先获取每个整数值的高16位,然后把这个整数分到2^16次方的Container中的某一个Container中
2.对于其中的每个Container,他有三个子类的实现,根据数据的特征选择不同的Container实现,比如当这个Container的数据量比较少时,使用ArrayContainer结构存放,当数据量比较多时,切换到BitmapContainer结构存放
3.存放在每个Container中的只是整数的低16位数值

彩蛋:

我们想要评估RoaringBitmap存放比如100w整数时占用的内存时,这100w整数分布不均匀和分布均匀时的结果会不一样,你知道为什么吗?
提示:看上面Container三个子类的互相转换条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值