Java中解决集合中交、差、并、补集的几种方式

该代码示例展示了如何在Java中计算两个ArrayList的交集、并集、差集和补集。使用了ArrayList的内置方法如retainAll、removeAll,以及StreamAPI和Hutool库的CollectionUtils工具类来实现这些集合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class CollectionOperationTest {
    //定义两个集合list01,list02
    private ArrayList<Integer> list01 = new ArrayList<>();
    private ArrayList<Integer> list02 = new ArrayList<>();

    /**
     * 集合交集:取2个集合中,相同的部分(list01 交集 list02,取list01和list02中相同的元素)
     * 两个集合的交集计算
     *
     * @throws Exception
     */
    @Test
    public void test() throws Exception {
        Collections.addAll(list01, 1, 2, 3, 4);
        Collections.addAll(list02, 3, 2, 1);
        /**
         * 1.通过ArrayList下的retainAll方法,如果list01和list02有相同元素,list01只保留相同的,去掉不同的。
         * 如果没有相同元素,list01变为空
         * retainAll 方法的返回值,在list1集合有变化就返沪true,没变化就返回false
         */
        boolean retainAll = list01.retainAll(list02);
        System.out.println(retainAll);
        System.out.println(list01);

        /**
         * 2.使用stream api,通过filter和list的contains方法
         *
         */
        List<Integer> collect = list01.stream().filter(o -> list02.contains(o)).collect(Collectors.toList());
        System.out.println(collect);

        /**
         * 3.通过HutoolCollectionUtils工具类的intersection方法
         */
        Collection<Integer> intersection = CollectionUtil.intersection(list01, list02);
        System.out.println(intersection);

    }

    /**
     * 集合并集
     *
     * @throws Exception
     */
    @Test
    public void test02() throws Exception {
        Collections.addAll(list01, 1, 2, 3, 4);
        Collections.addAll(list02, 3, 2, 1);
        /**
         * 1.通过HashSet来进行去重处理,分别将list1,list2都放到set中
         */
        HashSet<Integer> set = new HashSet<>();
        set.addAll(list01);
        set.addAll(list02);
        System.out.println(set);
        /**
         * 2.通过Hutool中的CollectionUtils工具类的union方法
         */
        Collection<Integer> union = CollectionUtil.union(list01, list02);
        System.out.println(union);
    }

    /**
     * 集合差集:取2个集合中,不相同的部分(list差集list2,取list1和list2不相同的元素)
     * 两个集合的差集计算
     *
     * @throws Exception
     */
    @Test
    public void test03() throws Exception {
        Collections.addAll(list01, 1, 2, 3, 4);
        Collections.addAll(list02, 3, 2, 1, 8);
        /**
         * 1.通过ArrayList的removeAll方法
         */
        boolean b = list01.removeAll(list02);
        System.out.println(list01);
        /**
         * 2.通过Hutool中的CollectionUtils工具类的subtract方法
         */
        Collection<Integer> subtract = CollectionUtil.subtract(list01, list02);
        System.out.println(subtract);
    }

    /**
     * 集合补集:取2个集合中,不相同的部分
     *
     * @throws Exception
     */
    @Test
    public void test04() throws Exception {
        Collections.addAll(list01, 1, 2, 3, 4);
        Collections.addAll(list02, 3, 2, 1);
        Collection<Integer> disjunction = CollectionUtil.disjunction(list01, list02);
        System.out.println(disjunction);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值