java 如何判断两个List<String>集合是否存在交集

在 Java 中判断两个 List<String> 集合是否存在交集,可以使用以下几种方法:

方法一:使用 retainAll 方法

retainAll 方法保留集合中与另一个集合相同的元素,如果集合发生变化,则表示存在交集。

java 复制代码
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("c", "d", "e");

List<String> temp = new ArrayList<>(list1);
boolean hasIntersection = temp.retainAll(list2);  // 返回 true 表示存在交集

System.out.println("是否存在交集:" + hasIntersection);

方法二:使用 StreamanyMatch

使用 Java 8 的流操作更简洁。

java 复制代码
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("c", "d", "e");

boolean hasIntersection = list1.stream().anyMatch(list2::contains);
System.out.println("是否存在交集:" + hasIntersection);

方法三:使用 Set 提高性能

如果集合较大,使用 Set 会更高效。

java 复制代码
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("c", "d", "e");

Set<String> set = new HashSet<>(list1);
boolean hasIntersection = list2.stream().anyMatch(set::contains);

System.out.println("是否存在交集:" + hasIntersection);

选择依据

  • retainAll 方法 简单直接,但会修改原集合。
  • Stream 是函数式编程风格,代码更简洁。
  • 使用 Set 避免了线性查找,适合大规模数据集合。
相关推荐
东北甜妹5 分钟前
K8s Ingress
java·运维·前端
杨凯凡6 分钟前
【033】Maven 生命周期与坐标:多模块结构
java·maven
lihongli0008 分钟前
关于c++中锁的种类与使用
java·开发语言·c++
凤凰院凶涛QAQ9 分钟前
《C++转Java快速入手系列》继承与多态篇
java·c++
倒霉蛋小马10 分钟前
Idea--如何同一个SpringBoot项目复制多次,模拟集群环境
java·ide·intellij-idea
IT 行者10 分钟前
Spring Boot 4.1.0-RC1 发布:核心新特性解析
java·spring boot·后端
Cat_Rocky11 分钟前
Ingress-Nginx 全局超时配置及生效方式
java·服务器·nginx
农业工作者15 分钟前
IDEA解决springboot工程中Cannot resolve symbol ‘SpringApplication异常 maven解决
java·开发语言·maven
你不是我我8 小时前
【Java 开发日记】HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·开发语言·微服务
雪碧聊技术9 小时前
大模型爆火!Java后端如何抓住Agent全栈开发的风口
java·大模型·agent·全栈开发