List取交集,差集,并集,去重并集

List求交集,差集,并集,去重并集

 * 交集	listA.retainAll(listB)	listA内容变为listA和listB都存在的对象
 * 差集	listA.removeAll(listB)	listA内容变为listA存在而listB不存在的对象
 * 并集	listA.addAll(listB)	listA内容变为listA和listB合并的对象
 * 去重并集	listA.removeAll(listB),listA.addAll(listB)	为了去重,listA先取差集,然后追加全部的listB

本来正好用到list求差集,正好整理一下其他常用的方法。

package com.company.main;

import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;

public class Test {

    /**
     * 交集	listA.retainAll(listB)	listA内容变为listA和listB都存在的对象
     * 差集	listA.removeAll(listB)	listA内容变为listA存在而listB不存在的对象
     * 并集	listA.addAll(listB)	listA内容变为listA和listB合并的对象
     * 去重并集	listA.removeAll(listB),listA.addAll(listB)	为了去重,listA先取差集,然后追加全部的listB
     */
    public static void main(final String[] args) throws ExecutionException, InterruptedException {

        // 差集
        List<String> list3 = new ArrayList<String>();
        List<String> list4 = new ArrayList<String>();
        list3.add("one");
        list3.add("two");
        list4.add("two");
        list4.add("three");
//        list3.removeAll(list4);
//        System.out.println(list3); // 结果:[one]

        //第二种求差
//        List distinctByUniqueList = list3.stream()
//                .filter(item -> !list4.stream().collect(Collectors.toList()).contains(item)).collect(Collectors.toList());
//        System.out.println(distinctByUniqueList); // 结果:[one]

        //第三种求差(效率最快)空间换时间,利用hashmap的key唯一
        HashMap<String, Boolean> map = new HashMap();
        List distinctByUniqueList = new ArrayList<>();
        for (int i = 0; i < list4.size(); i++) {
            map.put(list4.get(i), true);
        }
        for (int i = 0; i < list3.size(); i++) {
            String x = list3.get(i);
            if (!map.containsKey(x)) {
                distinctByUniqueList.add(x);
            }
        }
        System.out.println(distinctByUniqueList); // 结果:[one]

        // 并集
        List<String> list5 = new ArrayList<String>();
        List<String> list6 = new ArrayList<String>();
        list5.add("1");
        list5.add("2");
        list6.add("3");
        list6.add("2");
        list5.addAll(list6);
        System.out.println(list5); // 结果:[1, 2, 3, 2]

        // 去重并集
        List<String> list7 = new ArrayList<String>();
        list7.add("1");
        list7.add("2");
        List<String> list8 = new ArrayList<String>();
        list8.add("2");
        list8.add("3");
        list7.removeAll(list8);
        list7.addAll(list8);
        System.out.println(list7); // 结果:[1, 2, 3]
        //去重元素
        list7.add("2");
        List unique = list7.stream().distinct().collect(Collectors.toList());
        System.out.println(unique); // 结果:[1, 2, 3]


        // 交集
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        list1.add("one");
        list1.add("two");
        list2.add("two");
        list2.add("three");

        list1.retainAll(list2);
        System.out.println(list1); // 结果:[two]

    }


    /**
     * 字符串拼接
     * @throws Throwable
     */
    protected void appendJson() throws Throwable {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(" {\"beg\":1");
        String[] a = {"count", "get", "set"};
        HashMap hashMap = new HashMap();
        hashMap.put("set", 1);
        hashMap.put("count", 2);
        hashMap.put("one", 3);
        ArrayList<String> arrayList = new ArrayList();
        Collections.addAll(arrayList, a);
        arrayList.forEach(x -> {
            if (hashMap.get(x) != null) {
                stringBuffer.append(",\"" + x + "\":").append("\"").append(hashMap.get(x)).append("\"");
            }
        });
        stringBuffer.append("}");
        System.out.println(stringBuffer);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值