温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Set如何求交集

发布时间:2026-10-05 05:46:31 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

在 Java 中,Set 求交集(即两个集合中共同存在的元素)有几种常见方式。下面按实用程度和是否修改原集合来说明。


一、使用 retainAll(最常用,但会修改原 Set)

Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));
Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));

set1.retainAll(set2);
System.out.println(set1); // [B, C]

✅ 特点

  • set1 会被修改为交集
  • set2 不变
  • 时间复杂度较低(基于 equals / hashCode)

⚠️ 注意

  • 如果不想修改原集合,先拷贝一份
Set<String> intersection = new HashSet<>(set1);
intersection.retainAll(set2);

二、使用 Stream(不修改原集合,推荐)

Set<String> intersection = set1.stream()
        .filter(set2::contains)
        .collect(Collectors.toSet());

✅ 特点

  • 原集合不变
  • 代码清晰、函数式风格
  • 适合 Java 8+

⚠️ 注意

  • set2 用 HashSet 性能更好(contains 是 O(1))

三、手动遍历(最基础)

Set<String> intersection = new HashSet<>();
for (String s : set1) {
    if (set2.contains(s)) {
        intersection.add(s);
    }
}

✅ 适合理解原理或特殊逻辑


四、使用 Guava(第三方库)

Set<String> intersection = Sets.intersection(set1, set2);

✅ 返回的是视图(不拷贝,性能好)
❌ 需要引入 Guava


五、总结对比

方法 是否修改原集合 推荐度
retainAll ✅ 会修改 ⭐⭐⭐
Stream ❌ 不修改 ⭐⭐⭐⭐
手动遍历 ❌ 不修改 ⭐⭐
Guava ❌ 不修改 ⭐⭐⭐⭐

如果你有:

  • 需要保持顺序(用 LinkedHashSet)
  • 大集合性能问题
  • 自定义对象的 equals/hashCode

可以告诉我,我可以给你更合适的方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手