最近看到一本书(编程珠矶),里面讲到了海量数据的处理.其中有关于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来实现海量数据的处理.我们还可进行数据的快速查找,删除等等,以后有什么新用法,我还是会不断地跟大家分享的.