Bitmap主要用于快速检索关键字状态,通常要求关键字是一个连续的序列(或者关键字是一个连续序列中的大部分), 最基本的情况,使用1bit表示一个关键字的状态(可标示两种状态),根据需要也可以使用2bit(表示4种状态),3bit(表示8种状态)。 Bitmap的主要应用场合:表示连续(或接近连续,即大部分会出现)的关键字序列的状...
▍ Roaring BitMap及布隆过滤器 此外,在应用BitSet时,我们还会遇到数据碰撞的问题。以爬虫为例,我们将URL进行哈希运算后存入BitSet,但哈希碰撞不可避免。为了解决这一问题,我们可以引入布隆算法(Bloom Filter),它基于BitSet并能够有效处理数据碰撞。因此,布隆算法可以视为BitSet的一个拓展应用。
import java.util.BitSet; public class BitSetExample { public static void main(String[] args) { BitSet bitSet = new BitSet(); // 设置位 bitSet.set(0); bitSet.set(1); bitSet.set(2); // 清除位 bitSet.clear(1); // 输出 BitSet System.out.println(bitSet); // {0, 2} } } **获取...
public void or(BitSet other): other同该字位集进行或操作,结果作为该字位集的新值。 public void xor(BitSet other): other同该字位集进行异或操作,结果作为该字位集的新值。 public void andNot(BitSet set) 清除此 BitSet 中所有的位,set - 用来屏蔽此 BitSet 的 BitSet public int size(): 返回此 ...
publicBitSet(intnbits){// nbits can't be negative; size 0 is OKif(nbits<0)thrownewNegativeArraySizeException("nbits < 0: "+nbits);initWords(nbits);sizeIsSticky=true;} 1. 2. 3. 4. 5. 6. 7. 8. 注: 64的整倍数。比如64位,bitset的大小是1个long,而65位时,bitset大小是2个long,即12...
BitSet:在数据密集(即大部分位为1)或数据量较小时,性能较好。 RoaringBitmap:在数据稀疏(即大部分位为0)或数据量极大时,性能显著优于BitSet,因为它通过压缩技术减少了内存占用,并优化了查询速度。 使用场景: BitSet:适用于需要快速进行位操作且数据量不是极端稀疏的场景。 RoaringBitmap:特别适用于处理大规模稀疏...
import java.util.BitSet;public class BitmapExample {public static void main(String[] args) {// 创建一个BitSet实例BitSet bitmap = new BitSet();// 设置第5个位置为1,表示第5个元素存在bitmap.set(5);// 检查第5个位置是否已设置boolean exists = bitmap.get(5);System.out.println("Element at...
1、BitMap Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。(PS:划重点节省存储空间) 假设有这样一个需求:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,4G内存 ...
new BitMap().findDuplicate(); new BitMap().findDup_jdk(); } public void findDup_jdk() { System.out.println("***调用JDK中的库方法--开始***"); BitSet bitArray = new BitSet(N); int[] array = getArray(ARRNUM); for (int i ...
bitmap代码实现 第一步:构建特定长度的byte数组(new byte[capacity/8 + 1]),其中capacity为整数数组长度(如:10亿个数字等) byte[] bits =newbyte[getIndex(n) +1]; 第二步:计算数字num在byte[]中的位置(num/8和num >> 3一样),也就是说num在byte[k],算这个k是几 ...