取出list集合的相同元素和不同元素

比较两个list,分别找出相同元素和不同元素。
示例如下:

List<String> list1 = new ArrayList<String>();
list1.add("苹果手机");
list1.add("电脑");
list1.add("苹果");
list1.add("苹果");

List<String> list2 = new ArrayList<String>();
list2.add("华为手机");
list2.add("电脑");
list2.add("苹果");

取出相同元素

  • 遍历list1
  • 使用list2的contains,判断当前元素是否存在于list1中
  • 使用hashset除去list中可能重复的元素
public static List<String> equalList(List<String> list1,List<String> list2 ){
        //在这里实现代码:返回两个集合返回相同部分
        //使用HashSet去除list中存在的重复部分
        HashSet<String> hashSet = new HashSet<>();
        //list3用于存储重复部分
        List<String> list3 = new ArrayList<>();
        //获取开始时间
        long start = System.currentTimeMillis();
        //当有一个集合为空时,直接返回null;
        if(list1==null||list2==null){
            return null;
        }
        for(String str:list1){
            if(list2.contains(str)&&hashSet.add(str)){
                System.out.println("添加相同部分:"+str);
                list3.add(str);
            }
        }
        System.out.println("方法耗时:" + (System.currentTimeMillis() - start) + " 毫秒");
        return list3;
    }

取出不同元素

存在两个集合为空时,直接返回空
如果为其中一个为空,则直接返回另一个集合
除去上面条件,再进行集合比较元素
public static List<String> differenceList(List<String> list1,List<String> list2 ){
        List<String> diff = new ArrayList<String>();
        HashSet<String> hashSet = new HashSet<>();
        //获取开始时间
        long start = System.currentTimeMillis();
        if(list1==null&&list2==null){
            return null;
        }
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        for(String str:list1){
            if(hashSet.add(str)){
                diff.add(str);
            }
        }
        for(String str:list2){
            if(hashSet.add(str)){
                diff.add(str);
            }
        }
        System.out.println("方法耗时:" + (System.currentTimeMillis() - start) + " 毫秒");
        return diff;

    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值