最近看到一本书(编程珠矶),里面讲到了海量数据的处理.其中有关于bitmap的妙用,后来我又上网查了关于bitmap处理的一些技巧,很有收获.现在写出来跟大家一起分享一下.

1.排序:

    我们需要对一个int型数组里的数据进行排序,假如这些数据都没有重复,那么我们可以采用bitmap,当然你需要考虑到内存的限制.采用这种方法的排序的时间效率是介于线性的和平方时间的,假如bitmap的大小为M,数组的大小为N,那么时间代价为M+N. 具体的做法是:

    1.初始化bitmap,bitmap数组每一位置零;

    2.遍历数组,把bitmap下标对应数组值的位置置1;

    3.遍历bitmap,依次输出bitmap对应下标的值为1的下标;

 

2.查重:

    如果给你海量的数(这些数都是整数)(内存无法装下),这时可以考虑采用bitmap来解决.但是很明显,一个bitmap是不够的.因为有三种状态:不存在,出现不重复,重复.我们可以采用两个bitmap来解决.具体的做法如下:

    1.初始化两个bitmap,bitmap数组每一位置零;

    2.遍历数组,如果该值对应第一个bitmap数组的下标的值为0,那么置1,如果值为1,将第二个bitmap数组的对应数组值下标,置为1;

    3.遍历bitmap,依次输出两个bitmap对应下标的值都为为1的下标;

 

 

总结:尽管bitmap的使用限制比较大,一般来说数据范围是int的10倍以下,这样才不会造成内存消耗大,资源浪费等等,当然我们还要灵活运行bitmap来实现海量数据的处理.我们还可进行数据的快速查找,删除等等,以后有什么新用法,我还是会不断地跟大家分享的.