当前位置:首页 > 服务端 > 【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选

【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选

2022年11月09日 08:52:44服务端26

热门系列:


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()方法相比,底层实现不同,也导致效率差异明显。

 

本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!

【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选 _ JavaClub全栈架构师技术笔记

 

作者:善良勤劳勇敢而又聪明的老杨
来源链接:https://blog.csdn.net/yy339452689/article/details/105657691

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68715.html

标签: ListJava
分享给朋友:

“【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选” 的相关文章

Java空指针异常解决java.lang.NullPointerException解决心得

Java空指针异常解决java.lang.NullPointerException解决心得

今天做课设的时候运行程序报出以下错误 java.lang.NullPointerException 首先要理解的是此错误并不会在 程序中报错,只会在运行的时候报错。 是由于某个参数(集合,数组等数据)可能出现一个null值而导致后面的程序不能运行时...

java数数字及while和do while 的使用,以及程序的调试与验证

while的条件是在进入循环体之前判断的,执行完一轮循环之后,会再回到循环开始的地方再次判断条件,而不会在循环体中随时判断条件 1.while语句是当条件满足时不断的执行循环体内语句。 2.会提前判断是否满足条件,所以有可能一次也没有执行。 3.条件成立...

JAVA的JDK环境变量的配置JAVA

JAVA的JDK环境变量的配置JAVA

首先要在官网下载java 官网:http://www.oracle.com/technetwork/java/javase/downloads/ 到这个界面 选择我接受 记住该地址 最好的办法新建记事本,然后按ctrl+s保存 java环境变量的...

在JAVA 中将堆与栈分开的原因

栈是运行时的单位,而堆是存储的单位。 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么 放、放在哪儿。 注意:在Java中一个线程就会相应有一个线程栈与之对应 栈因为是运行单位,因此里面存储的信息都是跟...

Java 基础:hashCode方法

Java 基础:hashCode方法

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一、前言     泥瓦匠最近被项目搞的天昏地暗。发现有些要给自己一些目标,关于技术的目标: 专注...

图解 Java IO : 二、FilenameFilter源码

图解 Java IO : 二、FilenameFilter源码

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆  &...

Java 基础之详解 Java IO

Java 基础之详解 Java IO

Java IO 基本概念 Java IO:即 Java 输入 / 输出系统。 区分 Java 的输入和输出:把自己当成程序, 当你从外边读数据到自己这里就用输入(InputStream/Reader), 向外边写数据就用输出(OutputStream/Writer)。...

JavaWeb(一)之细说Servlet

JavaWeb(一)之细说Servlet

前言   其实javaWeb的知识早就学过了,可是因为现在在搞大数据开发,所以web的知识都忘记了。准备开始慢慢的把Web的知识一点一点的回忆起来,多学一点没有关系,就怕到时候要用的话,什么都不会了。 一、Servlet概述 1.1、Servlet简介   Se...

图解 & 深入浅出 JavaWeb:Servlet必会必知

图解 & 深入浅出 JavaWeb:Servlet必会必知

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆  &...

Java NIO之Selector(选择器)

Java NIO之Selector(选择器)

历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) Java NIO 之 Channel(通道) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集群原理及搭建与使用 超详细的Java...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。