...的8次方的人的电话号码排序(JAVA)应该怎么排,谁有思路麻烦请教下
发布网友
发布时间:2024-10-24 07:22
我来回答
共3个回答
热心网友
时间:2024-11-23 01:28
你好,典型的海量数据排序问题。给你一篇文章做参考吧:
在某个项目中,我们需要对2 亿条手机号码删除重复记录( 过滤号码黑名单同样有效)
工作难点就在于如何处理这2 亿条电话号码, 直接用哈希表存放手机号码不大现实, 即使经过优化, 用一个unsigned int 存放一条记录, 那也得需要2 亿*4=8 亿byte, 远超过32 位系统的寻址能力
解决方案:
将电话号码由12 位单个数字组成的字符串转换为一个unsigned int 型数据( 这个完全可能, 手机号码由前三位数字和后面八位数字组成, 后面八位需要占到1~1000 万的空间, 而前面用0~100 的数字存储已经足够) 为简单起见, 默认为0~4G 的数字都有可能分布号码 , 为此我们分配4G/32=512M 的内存将这2 亿个号码整理成unsigned int 类型后按上述办法存放在这块内存中( 比如13512345678 我们整理后为112345678, 我们找到内存中112345678bit 的下标, 并将此bit 值设为1) 遍历整个bit 数组, 记录下所有的号码, 这些号码即是不重复的手机号码
总结
建立一个足够大的bit 数组当作hash 表
以bit 数组的下标来表示一个整数
以bit 位中的0 或1 来表示这个整数是否在这个数组中存在
适用于无重复原始数据的搜索
原来每个整数需要4byte 空间变为1bit ,空间压缩率为32 倍
扩展后可实现其他类型(包括重复数据)的搜索
热心网友
时间:2024-11-23 01:33
存在数据库里的?select order by 啊。你不是想把这10的8次方个人。都用list存内在里排序吧。
热心网友
时间:2024-11-23 01:27
直接用数据快速排序就可以. Java的数组可以很长.