【Java】求两集合的交集、并集、差集

news/2024/11/29 1:38:50/

一、内置函数实现

1、removeAll方法:从list中删除指定集合中包含的所有元素。
2、retainAll方法:从list中删除指定集合中不包含的所有元素。
3、addAll方法:用来向Set集合添加另一个集合对象所包含的所有内容。

public class CollectionTest {public static void main(String[] args) {List<String> list1 = new ArrayList<>();List<String> list2 = new ArrayList<>();list1.add("a");list1.add("b");list1.add("c");list2.add("b");list2.add("e");list2.add("d");//求交集list1.retainAll(list2);System.out.println(list1.toString()); // b//求并集list1.removeAll(list2);list1.addAll(list2);System.out.println(list1.toString());  // a c b e d//求差集(list1有而list2没有)list1.removeAll(list2);   // a c}
}

参考链接:https://www.cnblogs.com/hxf-zb/p/16102135.html

二、for循环遍历实现 求两个集合的交集

利用集合的contains方法,来对比第二个集合中是否存在相同的元素的方法,同时将交集结果返回。时间复杂度是O(n)。
contains方法:用于判断list集合是否包含某个元素。

public List<Object> intersectionForList_1(List<Object> arr1, List<Object> arr2) {long startTime = System.currentTimeMillis();List<Object> result = new ArrayList<>();for (Object arr : arr1) {if (arr2.contains(arr)) {result.add(arr);}}long endTime = System.currentTimeMillis();log.info("intersectionForList_1:" + (endTime - startTime));return result;
}

三、使用Java 8 Stream API 求两个集合的交集

首先把两个集合转换成Stream,然后使用filter()方法筛选出交集元素,最后把结果转换成集合。 时间复杂度是O(n)。
.stream().filter()方法:来筛选出满足条件的对象,最终返回的筛选过后的列表。
Collectors.toList()和Collectors.toSet()方法都是将map后的stream转换为一个列表对象,toSet()会去重重复的对象

Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(4);Set<Integer> set2 = new HashSet<>();
set2.add(3);
set2.add(4);
set2.add(5);
Set<Integer> intersection = set1.stream().filter(set2::contains).collect(Collectors.toSet());
System.out.println(intersection); // 输出 [3, 4]

四、使用迭代器求两个集合的交集

public List<Object> intersectionForList_2(List<Object> arr1, List<Object> arr2) {List<Object> resultList = new ArrayList<>();List<Object> maxList;List<Object> minList;if (arr1.size()>arr2.size()){maxList = arr1;minList = arr2;}else {maxList = arr2;minList = arr1;}Iterator<Object> iterator = maxList.iterator();while (iterator.hasNext()){Object next = iterator.next();if (minList.contains(next)){resultList.add(next);}}return resultList;}

五、使用map 求两个集合的交集

首先将list集合中的元素依次存入一个map中去,然后再以map的get方法来判断是否存在这样的元素。
这种方法的效率最高,在10万条数据的测试下,这种方法耗时仅仅在十几毫秒,而其他方法在将近一百多毫秒。
在百万条数据进行对比处理的时候,使用map特性的方法时间消耗大概在40毫秒左右,但是其他方法要将近10秒钟,
所以在对于大量数据的处理过程中,还是非常建议使用这种方法的。

public List<Object> intersectionForList_3(List<Object> arr1, List<Object> arr2) {List<Object> resultList = new ArrayList<>();Map<String,Object> map = new HashMap<>();arr1.forEach(a1->{map.put(a1+"",a1);});arr2.forEach(a2->{Object obj = map.get(a2 + "");if (obj!=null){resultList.add(obj);}});return resultList;
}

参考链接:https://blog.csdn.net/jcc4261/article/details/127357403


http://www.ppmy.cn/news/487296.html

相关文章

Java Session会话技术

一、Session简介 Session技术是将数据存储在服务器端的技术&#xff0c;会每个客户端都创建一块内存空间存储客户的数据&#xff0c;但客户端需要都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie&#xff0c;Session需要借助于Cookie存储…

验证IP地址IPv4和IPv6

描述 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址 IPv4 地址由十进制数和点来表示&#xff0c;每个地址包含4个十进制数&#xff0c;其范围为 0 - 255&#xff0c; 用(".")分割。比如&#xff0c;172.16.254.1&#xff1b; 同时&#xff0c;IPv4…

三星i917无法开机的解决办法

i917有个特性&#xff0c;充电时会自动开机&#xff0c;我们可以利用这个特性避开使用电源键开机。 开机步骤 取出电池按住音量键&#xff08;&#xff09;放入电池保持按住音量键&#xff08;&#xff09;的状态&#xff0c;此时应该可以看到i917开机&#xff0c;开机后松开音…

【经验贴】多项目并行,如何解决资源管理这个难点?

随着公司业务的逐步增加&#xff0c;我手上管理的项目也多了起来&#xff0c;开始接触了一些中大型项目。但还没来得及算能拿到多少项目奖金&#xff0c;我就被接踵而至的管理难题压得喘不过气来&#xff0c;第一次感受到多项目并行带来的手忙脚乱的感觉。 我首先遇到了各种资…

ESG 西学渐东燎原势 (二)

目录 1.品牌理念高瞻远瞩 2.全球化的品牌传播 3.本土化的品牌实践 本土化的品牌实践 当前&#xff0c;全球疫情跌宕蔓延&#xff0c;百年变局加速演进&#xff0c;世界进入动荡变革期&#xff0c;各主要经济体复苏态势明显&#xff0c;全球战胜疫情的信心进一步增强。数字经济…

linux下express+puppeteer安装部署并用PM2守护进程

背景 承上篇 puppeteer-不需重构&#xff0c;无痛加强vue单页面应用的SEO&#xff0c;提升百度收录排名,是在本地nginx部署前端&#xff0c;本地另起express服务进行测试&#xff0c;下面我们来讲讲如何部署express到linux服务器&#xff0c;并用PM2守护进程。 node 16.14.1 p…

训练个中文版ChatGPT没那么难:不用A100,开源Alpaca-LoRA+RTX 4090就能搞定

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G Alpaca-LoRA 将微调类 ChatGPT 模型的算力需求降到了消费级&#xff0c;训练个自己的中文对话模型真…

可以微调类ChatGPT模型啦!开源Alpaca-LoRA+RTX 4090就能搞定

源 | 机器之心 Alpaca-LoRA 将微调类 ChatGPT 模型的算力需求降到了消费级&#xff0c;训练个自己的中文对话模型真就没那么难了。 2023 年&#xff0c;聊天机器人领域似乎只剩下两个阵营&#xff1a;「OpenAI 的 ChatGPT」和「其他」。 ChatGPT 功能强大&#xff0c;但 OpenAI…