10亿手机号如何去重?(BitMap)
10亿手机号如何去重
- 方案一使用数组
- 方案二使用HashSet
- 方案三BitMap
- java.util.BitSet
- 分桶理论
方案一使用数组
一个数组存入10亿数据,第一位手机号一定为1则忽略。
如果存储的是String类型 存储10e个 需要9.5GB左右。
如果存储的是Long类型 存储10e个 需要7.5GB左右。
进行for循环运算效率很低,内存占用很大。
方案二使用HashSet
HashSet底层使用HashMap,需要记录hash值、value、key、next节点等各种各样的东西。消耗内存可想而知,20GB左右。
方案三BitMap
Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
声明一个Bit数组
如果对应的数字存在 那么表示1,如果不存在表示0. 此时的BitMap数组内存为1.2G。
java.util.BitSet
而java中java.util.BitSet 来实现了 BitMap特性。
当存放10位手机号时会发现
因为BitSet中定义的是Integer这样已经超过了Integer.MAX_VALUE。
所以我们使用分桶理论
分桶理论
//电话号 135 2333 3222BitSet bitSet = new BitSet();bitSet.set(23333222);Map<String,BitSet> map = new HashMap();//当Key存在时,BiFunction一定会被执行BitSet bitSet135 = map.computeIfAbsent("135", k -> bitSet);System.out.println(bitSet135.get(23333222));System.out.println(bitSet135.get(23333221));
从而所占用的内存只有360M
10亿手机号如何去重?(BitMap)相关推荐
- 对10亿个数据去重java_JAVA 8 新特性
JAVA 8 新特性 一.Lambda 表达式 Consumer Predicate Function Supplier 二.stream 流 1. 获取流 2. 中间操作 1.1)map 把对应的操 ...
- 10亿条数据去重后排序和在线日志人数统计
一:10亿条数据排序 思路:数据量比较大,普通比较会占用很多的内存,可以采用其他方法,构造一个字节数组 每个字节的值代表连续八个整形数据的值是否存在,即使包括最大的整数值,大概内存512m 源码如下 ...
- 对10亿个数据去重java_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
有一道流传广泛的面试题: 给你一台 4G 内存的机器,一组 20 亿个无序正整数,如何快速地判断一个正整数 N 是否在这组数字中?或者如何快速地对这组数据排重后排序? 让我们先算算 20 亿个整数会占 ...
- 怎样对10亿个数字快速去重?——浅析位图数据结构及其应用
给你几亿个QQ号,怎样快速去除重复的QQ号? 可以作如下假定: QQ号数字范围从0到十亿,即[0, 1000000000),且最多给你10亿个QQ号,这些QQ号放在1或多个文本文件中,格式是每行一个Q ...
- 2015百度面试题--对10亿个32位整数去重和排序
对放在文件中的10亿个32位整数进行去重和排序 :10亿个32位整数的大小约为4GB,这里假设电脑的内存放不下.使用bit位图能够很快解决该问题(其实思想类似于哈希),使用10亿个比特位来表示每个数, ...
- 怎么对10亿个电话号码进行去重
方法一: 通过哈希算法,将10亿个电话号码按照哈希值落在多个文件中, 重复的电话号码有相同的哈希值,肯定位于一个文件中, 这样就可以分别对每个文件排序删除重复的电话号码. 方法二: 使用位图来进行处理 ...
- java 十亿数据去重_如何在有限的内存限制下实现数十亿级手机号码去重
版权申明 原创文章:本博所有原创文章,欢迎转载,转载请注明出处,并联系本人取得授权. 版权邮箱地址:banquan@mrdwy.com 问题难点 文本和数据的去重是经常要用到的重要操作,普通数量的文本 ...
- 10亿int型数,统计只出现一次的数
原文:http://blog.csdn.net/u010983881/article/details/75097358 题目 10亿int整型数,以及一台可用内存为1GB的机器,时间复杂度要求O(n) ...
- 判断数组中某个元素除自身外是否和其他数据不同_布隆过滤器,我也是个处理过 10 亿数据的人...
❝ 文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 什么是 BloomFilter 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的.它实际上是 ...
最新文章
- java rest 知乎_java 自动化 三分钟带你理解 RESTful
- Excel2000的数字签名功能
- python 堆_40道Python经典面试题(附答案)
- 判断点是否在凸多边形内
- (转载)SpringBoot 发送邮件和附件
- SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)...
- [译][Tkinter 教程15] event 事件绑定
- TCP程序中发送和接收数据
- Kotlint集合简单总结
- Intro to Xamarin.Android Xamarin Android入门教程 Lynda课程中文字幕
- python处理excel函数库_Python 操作 Excel 的函数库
- otsu阈值分割算法原理_OpenCV学习30--阈值分割的OTSU算法
- 微信小程序开发官方文档
- WSUS服务器点击报告报错解决办法
- 针对s3c2440芯片制作交叉编译工具链
- Github常用框架集合
- (个人解题思路系列)五子棋
- 电力监控系统在嘉兴万豪酒店的设计与应用
- php pdf文档内容修改,php2pdf - 如何使用php修改pdf中的内容,并且保证格式不乱
- Linux常见问题及解决方案