一个int整数在java中是占4个字节的即要32bit位,而bitmap可以用一个bit位来标识一个int整数,bitmap存储数据的方式可以大大的节省存储空间。
示例图
- tmp[i]大小为32bit,即java中的一个int整数
- i的值为数字直接除以32取整数部分(x/32)
- 将数字mod32(x%32),可以得到数字在哪一个列
bitmap的优点
- 运算效率高,不许进行比较和移位;
- 占用内存少,比如N=10000000;只需占用内存为N/8=1250000Byte=1.25M
bitmap的缺点
- 所有的数据不能重复。即不可对重复的数据进行排序和查找
- 数据中最大最小值相差太大,如{1,2 99999},只有三个数,但是最大最小相差悬殊,该方法就不适用
/**
* 最初的原理就是数据可以压缩,然后放在内存中间节约时间
* 寻找重复、判断个别元素是否在海量数据当中
* @param args
*/
public static void main(String[] args) {
int[] array = new int[] {1,2,3,220,3};
BitSet bitSet = new BitSet(6);
for (int i = 0; i < array.length; i++) {
bitSet.set(array[i]);
}
System.out.println(bitSet.size());
System.out.println(bitSet.get(3));
System.out.println(bitSet.get(100));
}
BitSet能够保证"如果判定结果为false,那么数据一定是不存在的,但是如果结果为true,那么数据可能存在,也可能不存在(冲突覆盖)",即false==yes;true==maybe
网友评论