现在的位置: 首页 > 综合 > 正文

【数据结构】BitMap使用

2014年03月17日 ⁄ 综合 ⁄ 共 942字 ⁄ 字号 评论关闭

大数据是越来越火热的一个词语,对大数据的处理也同样是各种公司面试的常问题目。对大数据处理有几种通用的方式:分治,分布式,bitmap,bloom filter。bitmap与bloom filter主要是用于对大数据进行过滤,找到符合某些条件的数据。本文对bitmap进行简单分析。

java中有对bitmap的实现,是java,util.BitSet。

其提供了两种构造方法:

BitSet()
创建一个新的位 set。
BitSet(int nbits)
创建一个位 set,它的初始大小足以显式表示索引范围在 0nbits-1 的位。

BitSet所有的操作都是对某一位进行操作的,比如public void set(int bitIndex, boolean value) 就是对bitIndex这一位进行赋值操作,而不是对大小进行赋值。比如set(1, true)表示对第二位赋值为true,真实表现为10.如果想表示2曾经出现过,那么就需要set(1, true),因为2的二进制表示就是10。

其中BitSet提供了两种获取大小的方法,length(),size(),注意这两种方法是不同的。

length():返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。如果
BitSet
中不包含任何设置位,则返回零;比如你new了一个bitSet,bitSet(100,true)。那么对其调用length(),则返回的是101.

size():而这个方法返回的是在实际存储中,BitSet为了存储你的数据总过占据了实际位数是多少。比如,你使用了第二种构造方法newBitSet(100),在计算机中都是按照字节来标识,所以对于100肯定需要一个大约100的整字节数进行存储,这时候返回的size就是128.其实最主要的是BitSet内部封装了一个long型的数组,每次new一个新的BitSet对象都是对long型的数组进行分析和处理的。最后返回的位数其实就是需要几个long型的数字,比如128位,则其实是16个字节,则表示需要两个long型的数字来表示整个bitset。

bitmap的应用 :http://blog.csdn.net/s120922718/article/details/8844665

抱歉!评论已关闭.