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)相关推荐

  1. 对10亿个数据去重java_JAVA 8 新特性

    JAVA 8 新特性 一.Lambda 表达式 Consumer Predicate Function Supplier 二.stream 流 1. 获取流 2. 中间操作 1.1)map 把对应的操 ...

  2. 10亿条数据去重后排序和在线日志人数统计

    一:10亿条数据排序 思路:数据量比较大,普通比较会占用很多的内存,可以采用其他方法,构造一个字节数组 每个字节的值代表连续八个整形数据的值是否存在,即使包括最大的整数值,大概内存512m 源码如下 ...

  3. 对10亿个数据去重java_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...

    有一道流传广泛的面试题: 给你一台 4G 内存的机器,一组 20 亿个无序正整数,如何快速地判断一个正整数 N 是否在这组数字中?或者如何快速地对这组数据排重后排序? 让我们先算算 20 亿个整数会占 ...

  4. 怎样对10亿个数字快速去重?——浅析位图数据结构及其应用

    给你几亿个QQ号,怎样快速去除重复的QQ号? 可以作如下假定: QQ号数字范围从0到十亿,即[0, 1000000000),且最多给你10亿个QQ号,这些QQ号放在1或多个文本文件中,格式是每行一个Q ...

  5. 2015百度面试题--对10亿个32位整数去重和排序

    对放在文件中的10亿个32位整数进行去重和排序 :10亿个32位整数的大小约为4GB,这里假设电脑的内存放不下.使用bit位图能够很快解决该问题(其实思想类似于哈希),使用10亿个比特位来表示每个数, ...

  6. 怎么对10亿个电话号码进行去重

    方法一: 通过哈希算法,将10亿个电话号码按照哈希值落在多个文件中, 重复的电话号码有相同的哈希值,肯定位于一个文件中, 这样就可以分别对每个文件排序删除重复的电话号码. 方法二: 使用位图来进行处理 ...

  7. java 十亿数据去重_如何在有限的内存限制下实现数十亿级手机号码去重

    版权申明 原创文章:本博所有原创文章,欢迎转载,转载请注明出处,并联系本人取得授权. 版权邮箱地址:banquan@mrdwy.com 问题难点 文本和数据的去重是经常要用到的重要操作,普通数量的文本 ...

  8. 10亿int型数,统计只出现一次的数

    原文:http://blog.csdn.net/u010983881/article/details/75097358 题目 10亿int整型数,以及一台可用内存为1GB的机器,时间复杂度要求O(n) ...

  9. 判断数组中某个元素除自身外是否和其他数据不同_布隆过滤器,我也是个处理过 10 亿数据的人...

    ❝ 文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 什么是 BloomFilter 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的.它实际上是 ...

最新文章

  1. java rest 知乎_java 自动化 三分钟带你理解 RESTful
  2. Excel2000的数字签名功能
  3. python 堆_40道Python经典面试题(附答案)
  4. 判断点是否在凸多边形内
  5. (转载)SpringBoot 发送邮件和附件
  6. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)...
  7. [译][Tkinter 教程15] event 事件绑定
  8. TCP程序中发送和接收数据
  9. Kotlint集合简单总结
  10. Intro to Xamarin.Android Xamarin Android入门教程 Lynda课程中文字幕
  11. python处理excel函数库_Python 操作 Excel 的函数库
  12. otsu阈值分割算法原理_OpenCV学习30--阈值分割的OTSU算法
  13. 微信小程序开发官方文档
  14. WSUS服务器点击报告报错解决办法
  15. 针对s3c2440芯片制作交叉编译工具链
  16. Github常用框架集合
  17. (个人解题思路系列)五子棋
  18. 电力监控系统在嘉兴万豪酒店的设计与应用
  19. php pdf文档内容修改,php2pdf - 如何使用php修改pdf中的内容,并且保证格式不乱
  20. Linux常见问题及解决方案

热门文章

  1. Registration小结2
  2. 如何根据k线数据绘制k线图
  3. python中元组的定义与如何创建元组
  4. 中国能出现一家 Zoom 吗?
  5. 中文puppy linux7.5,Puppy Linux 7.5发布,支持UEFI启动的
  6. 升级coda_Coda:从我们周围的结构中学习
  7. 百度地图html演示,百度地图.html
  8. 【19调剂】其它调剂信息(计算机/软件专业)【3.56】
  9. mkimage工具将zImage转换为uImage
  10. [BZOJ 3730] 震波