Appearance
bitmap-bitset-demo
验证目标:手写 long[] 位图的定位公式、java.util.BitSet 集合运算、k 哈希布隆过滤器的"零漏判 + 误判率实测"。
关键实现速览
BitmapBasicsDemo:SimpleBitmap用bit >> 6(第几个 long)与bit & 63(第几位)定位,1 个元素 1 bit;再演示BitSet.and()交集与cardinality()计数。BloomFilterDemo:由hashCode双哈希派生 k 个位置(k≈7),插入时全置 1;查询时任一位置为 0 即"必不存在"。实测 1 万条录入 + 10 万条随机查询的误判率 ≈ 理论 1%。
运行
bash
cd labs/foundations/bitmap-bitset-demo
javac -d out src/*.java
java -cp out BitmapBasicsDemo
java -cp out BloomFilterDemo可能输出(节选)
get(69)=true, get(70)=false
a ∩ b = {3}
已录入 1 万条,漏判数 = 0(应为 0,零漏判)
未录入随机 10 万条误判 98X 条(0.9X%),理论 ≈ 1%观察重点
- 手写位图每次只读写一个 long 的某一位 →
O(1)、1 bit / 元素。 - 布隆漏判恒为 0;误判率由
m、k决定(m = -N·ln(p)/(ln2)²)。