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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神的孩子都在歌唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值