【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选
热门系列:
-
【Java编程系列】WebService的使用
-
【Java编程系列】在Spring MVC中使用工具类调用Service层时,Service类为null如何解决
-
【Java编程系列】Spring中使用代码实现动态切换主从库(多数据源)
-
【Java编程系列】log4j配置日志按级别分别生成日志文件
-
【Java编程系列】使用Java进行串口SerialPort通讯
-
【Java编程系列】comet4j服务器推送实现
-
【Java编程系列】使用JavaMail通过SMTP协议发送局域网(内网)邮件
-
【Java编程系列】解决Java获取前端URL中加号(+)被转换成空格的问题
-
【Java编程系列】Java自定义标签-Tag
-
【Java编程系列】Java与Mysql数据类型对应表
-
【Java编程系列】二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!!
-
程序人生,精彩抢先看
1.序言
前段时间,接到一个需求。需要将微信公众号的粉丝批量分组。当时需要分组的粉丝用户量达到250W左右,但通过和我们的业务数据库中筛选出来的不合格用户粉丝,需要从250W粉丝中过滤去重。不合格的粉丝数有80W条左右,也就是最终需要筛选出需要分组的粉丝数为170W左右。如此一下,两个大数据集合对比筛选就需要考虑效率问题了!
2.过程
①一开始尝试了一下双重for循环大法,那结果,酸爽无比。程序直接把CPU喂饱了。。。。如此肯定是不可取的。
②使用Iterator迭代器,通过单循,并使用list的contains方法,来筛选。代码如下:
Iterator fensiIterator = fensiList.iterator();
String temp = null;
while (fensiIterator.hasNext()){
temp = fensiIterator.next().toString();
if(openIds.contains(temp)){
fensiIterator.remove();
}
}
效率也很差,但比第一种稍微好一丢丢
③加强版来啦(推荐)!!!!先上代码:
//250W数据list集合转换成set集合
HashSet fensiSet = new HashSet(fensiList);
//80W从数据库筛选出来不合符条件,需要过滤掉的用户list集合
HashSet removeSet = new HashSet(openIds);
//去重操作
fensiSet.removeAll(removeSet);
//清空原有list,并装入过滤后的数据set集合
fensiList.clear();
fensiList.addAll(fensiSet);
已经加上了注释,大家应该可以一目了然吧!
咱们来分析一下,为啥set如此之快!查贴发现,原来set的HashSet.contains()方法,底层是通过HashMap来实现的。而HashMap的查找速度是很快的。虽然list也有removeAll()方法,但是与set的removeAll()方法相比,底层实现不同,也导致效率差异明显。
本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!
作者:善良勤劳勇敢而又聪明的老杨
来源链接:https://blog.csdn.net/yy339452689/article/details/105657691
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。