在项目中用到bitset,其做用是把名单中的userid映射到bitset中,当uid请求时先从bitset中查找有木有,没有直接返回,有记录,则到db中去查具体的类型;这样能够优化系统查询算法
用户id:1-6000w数组
bitset的底层须要有 6000w个位bit,数据结构
大概 6000w/8 = 750w 字节BYTE = 750w/1024/1024 =7.2M优化
引用:BitSet的实现原理ui
一、BitSet介绍 spa
Bitset是Java中的一种数据结构。Bitset中主要存储的是二进制位,作的也都是位运算,每一位只用来存储0,1值,主要用于对数据的标记。 .net
Bitset的基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用的时候能够根据某一个位是否为0表示此数是否出现过。JDK中的BitSet集合对是布隆过滤器中常用的数据结构Bitmap的相对简单的实现。BitSet采用了Bitmap的算法思想。
使用场景:整数,无重复。
日志
二、BitSet的底层实现是使用long数组做为内部存储结构的,这就决定了BitSet至少为一个long的大小,并且BitSet的大小为long类型大小(64位)的整数倍。 blog
long数组的每个元素均可以当作是64位的二进制数,也是整个BitSet的子集。在BitSet中把这些子集叫作[Word]。
三、BitSet常见的应用场景是对海量数据的处理,能够用于对大数量的查找,去重,排序等工做,相比使用其余的方法,占用更少的空间,显著提升效率;也能够使用BitSet进行一些统计工做,好比日志分析、用户数统计等;还能够使用其方法作一些集合方面的运算,好比求并集、交集和补集等。
排序