Java_集合操作_集合运算时使用更优雅的方式

在初中代数中,我们经常会求两个集合的并集、交集、差集等,在Java中也存在着此类运算,那如何实现呢?一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果。是的,遍历可以实现并集、交集、差集等运算,但这不是最优雅的处理方式。下面来看看如何进行更优雅、快速、方便的集合操作。

1.并集
也叫做合集,把两个集合加起来即可,这非常简单,代码如下:

package deep;

import java.util.ArrayList;
import java.util.List;

public class Client {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        list1.add("A");
        list1.add("B");
        List<String> list2 = new ArrayList<String>();
        list2.add("C");
        list2.add("D");
        // 并集
        list1.addAll(list2);
        System.out.println(list1);
    }
}

运行结果:
[A, B, C, D]

2.交集
计算两个集合的共有元素,也就是你有我也有的元素集合,代码如下:

package deep;

import java.util.ArrayList;
import java.util.List;

public class Client {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        List<String> list2 = new ArrayList<String>();
        list2.add("A");
        list2.add("D");
        // 交集
        list1.retainAll(list2);
        System.out.println(list1);
    }
}

运行结果:
[A]

3.差集
由所有属于A但不属于B的元素组成的集合,代码如下:

package deep;

import java.util.ArrayList;
import java.util.List;

public class Client {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        List<String> list2 = new ArrayList<String>();
        list2.add("A");
        list2.add("D");
        // 差集
        list1.removeAll(list2);
        System.out.println(list1);
    }
}

运行结果:
[B, C]

4.无重复的并集
什么叫无重复的并集?并集是集合A加集合B,那如果集合A和集合B有交集,就需要确保并集的结果中只有一份交集,此为无重复的并集。此操作也比较简单,代码如下:

package deep;

import java.util.ArrayList;
import java.util.List;

public class Client {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        List<String> list2 = new ArrayList<String>();
        list2.add("A");
        list2.add("B");
        list2.add("D");
        // 删除在list1中出现的元素
        list2.removeAll(list1);
        // 把剩余的list2元素添加到list1中
        list1.addAll(list2);
        System.out.println(list1);
    }
}

运行结果:
[A, B, C, D]

有读者可能说了,求出两个集合的并集,然后转变成HashSet剔除重复元素不就解决问题了吗?错了,这样解决是不行的,比如集合A有10个元素(其中有两个元素值是相同的),集合B有8个元素,它们的交集有2个元素,我们可以计算出它们的并集是18个元素,而无重复的并集有16个元素,但是如果使用HashSet算法,算出来则只有15个元素,因为你把集合A中原本就重复的元素也剔除掉了。
集合的这些操作在持久层中使用得非常频繁,从数据库中取出的就是多个数据集合,之后我们就可以使用集合的各种方法构建我们需要的数据了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值