如何判断一个数是否在40亿个整数中
所属分类 java
浏览量 1296
假设都为正整数
一般都会想到用 hashmap 或者 排序之后使用二分查找也称折半查找(Binary Search)
这种简单粗暴的方法比较消耗内存
一个整数4个字节 100百万个整数占用约 4M内存 1亿个整数占用约400M内存
40亿个整数占用约16G内存
比较巧妙的方法是使用 java中自带的 BitSet java.util.BitSet
BitSet 是一个可以自动扩展的bitmap 可以将索引对应的位置设置成0或1
底层使用long数组来保存位信息 ,long数组按需自动扩展
一个long 8个字节 64位,对应64个整数 64*4=256字节,可节省大量内存
读取40亿个整数初始化bitset 然后使用 get方法判断是否存在
public boolean get(int bitIndex)
随机生成1000W个整数 然后查询0到9是否存在
bitmap/bitset 常用使用场景 桶排序 去重 查询 Bloom Filter(布隆过滤器) 等
BitSet原理及测试代码
https://gitee.com/dyyx/hellocode/blob/master/src/dyyx/test/BitsetTest.java
上一篇
下一篇
当下最好的生意
一个小故事讲明白区块链
币圈吹牛逼套路汇总
延迟队列原理及使用场景
JVM CMS 常用参数
JVM CMS 介绍