偶然间看到快速去重,总结一下关于bitmap得一些了解和疑问!
首先快速去重或者快速查重,如果数据量过于庞大,比如说找出40亿个int中得重复数据。那么如果都加载在内存里以int形式存储,每个int占4个字节,40亿个int就是20多个G,这显然是不现实得,所以bitmap会有效得解决这个问题。
我理解得bitmap,是一个压缩内存得工具,通过用最小得单位来映射int或者long,那么映射之后,就是20G/32,也就是600多兆,是不是就可以接受了!!
接下来就是刚刚参考其他人的文章的一些理解,1个字节是8位,也就是说一个字节就可以表示八个数字一一对应!
1.利用bitmap筛选不重复的数字!!
我们可以给数字设定状态,无非是重复,唯一,还有就是不存在!!假设0表示不存在,1表示唯一,2表示重复,那放入bitmap就可以进行判断,判断该数字对应的bitmap中的位置是否有数据,如果没有,状态为0改为1,如果有状态为1改为2,就可以筛选出最后所有存储之后状态为1的数据,就是所有不重复的数据
2.利用bitmap去重
那就更加简单,只需要判断某个对应位置上是否有数据,状态也只有0或1,如果没有,存储数据,0改为1,如果有,则可以不再进行存储,也可以进行覆盖,最终拿出bitmap中所有状态对应为1的位置,就可以实现去重,是不是很简便呢!!!
最后,还有布隆过滤器,底层就是使用了这个原理,具体的还有待深入研究!!!
小白一名,简单将自己的理解分享一下,希望可以得到大家的指点,也加深自己的印象!!!!
感谢浏览!