bitmap 是索引最长常见的一种实现方式。就是bit位的每一位,来作为表示要索引的对象。通常位图索引通常表达取值维度取值较少的数据.,最好是布尔值
比如
| 1 |
| 0 |
| 0 |
| 0 |
比如上表中,对一个人描述,就可以用1000
表示
在取值较多(高基数)情况,也可以应用位图,一是方便查询,便于应用 OR AND 等操作,而是可以将bit位编成整数,这样大大减少了存贮和传输的空间。
bitmap 是可以想象为一串大二级制。从低位到高位的每一个位置表示是表示从1到n的连续十进制数。如果list中最大数为max。那么我们可以用max位的二进制串表示list中所有数。
这个公式很好理解,左移5位,是除以2的5次方(32)。
通过size我们就能确定位图的大小,
同理对list 中的一个数我们也可以通过这种方式找到它编码后所在的整型(编码后整型数字都是,按从低位到高排列)
int buket = bitIndexList.get(i) >>5;
不难想出
这个数字在整型中的位置,就是对32求余,