Java 集合交集判断

举报
神的孩子在歌唱 发表于 2024/10/27 23:44:26 2024/10/27
【摘要】 Java 集合交集判断前言这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。作者:神的孩子都在歌唱一. 使用 retainAll() 方法retainAll() 是 Java Collection 接口中的一个方法,它用于保留集合中与另一个集合的交集部分。可以通过判断操作后的集合是否为空来确定是否有交集。示例代码:import java.util.Arrays;im...

Java 集合交集判断

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱




一. 使用 retainAll() 方法

retainAll() 是 Java Collection 接口中的一个方法,它用于保留集合中与另一个集合的交集部分。可以通过判断操作后的集合是否为空来确定是否有交集。

示例代码:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
​
public class IntersectionExample {
    public static void main(String[] args) {
        Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));
        Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));
​
        // 创建一个副本以避免修改原始集合
        Set<String> intersection = new HashSet<>(set1);
        intersection.retainAll(set2);
​
        if (!intersection.isEmpty()) {
            System.out.println("两个集合有交集: " + intersection);
        } else {
            System.out.println("两个集合没有交集");
        }
    }
}

输出结果:

两个集合有交集: [B, C]

解释:

  • retainAll() 方法将 set1 中与 set2 共有的元素保留下来,并删除其他元素。

  • 如果 intersection 集合不为空,说明两个集合有交集。


二. 使用 removeAll() 方法与判断集合大小

removeAll() 方法会从集合中移除与另一个集合的所有交集元素。如果移除后集合大小发生变化,则说明两个集合有交集。

示例代码:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
​
public class RemoveAllExample {
    public static void main(String[] args) {
        Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));
        Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));
​
        int originalSize = set1.size();
        set1.removeAll(set2);
​
        if (set1.size() < originalSize) {
            System.out.println("两个集合有交集");
        } else {
            System.out.println("两个集合没有交集");
        }
    }
}

输出结果:

两个集合有交集

解释:

  • removeAll() 方法删除了 set1 中与 set2 的交集部分。

  • 通过比较操作前后的集合大小,判断是否存在交集。


三. 使用 Stream 流式处理

Java 8 引入了 Stream,可以通过 anyMatch() 方法检查一个集合中的元素是否出现在另一个集合中。

示例代码:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
​
public class StreamExample {
    public static void main(String[] args) {
        Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));
        Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));
​
        boolean hasIntersection = set1.stream().anyMatch(set2::contains);
​
        if (hasIntersection) {
            System.out.println("两个集合有交集");
        } else {
            System.out.println("两个集合没有交集");
        }
    }
}

输出结果:

两个集合有交集

解释:

  • anyMatch() 方法检查 set1 中是否存在任意一个元素出现在 set2 中。

  • 这种方式使用流式处理,简洁而高效。


四. 使用 Collections.disjoint() 方法

Collections.disjoint() 是 Java 提供的一个专用方法,用于检查两个集合是否没有交集。

示例代码:

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
​
public class DisjointExample {
    public static void main(String[] args) {
        Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));
        Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));
​
        boolean noIntersection = Collections.disjoint(set1, set2);
​
        if (!noIntersection) {
            System.out.println("两个集合有交集");
        } else {
            System.out.println("两个集合没有交集");
        }
    }
}

输出结果:

两个集合有交集

解释:

  • Collections.disjoint() 返回 true 表示两个集合没有交集,返回 false 则说明有交集。


五. 总结

  1. retainAll() 方法最直接,通过修改集合保留交集。

  2. removeAll() 可用于判断交集,同时消除交集元素。

  3. Stream 方法在 Java 8 之后提供了一种简洁的方式。

  4. Collections.disjoint() 提供了一个简单的现成方法来判断两个集合是否没有交集。


六. 参考文章

判断Set是否有交集

Java判断两个集合是否有交集


作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。