获取两个集合中不同的元素

前言

对于两个list、或者set集合中,获取其中不同元素方法的获取这块,因为自己工作上有所涉及,所以自己针对这块进行总结,希望能为其他小伙伴有所帮助!

一、代码块内容

(1).封装工具类代码块

import java.util.*;

/**
 * @ClassName: ElenmentUnits
 * @Description:
 * @Author: songwp
 * @Date: 8:13 2022/7/6
 **/
public class ElenmentUnits {

    /**
          * 获取两个List的不同元素
          * @param list1
          * @param list2
          * @return
          */
    public  List<String> getListDiffrent(List<String> list1, List<String> list2){
        Map<String,Integer> map = new HashMap<String,Integer>(list1.size()+list2.size());
        List<String> diff = new ArrayList<String>();
        List<String> maxList = list1;
        List<String> minList = list2;
        if(list2.size()>list1.size()){
            maxList = list2;
            minList = list1;
        }

        for (String string : maxList){
            map.put(string, 1);
        }

        for (String string : minList){
            Integer cc = map.get(string);
            if(cc!=null){
                map.put(string, ++cc);
                continue;
            }
            map.put(string, 1);
        }

        for(Map.Entry<String, Integer> entry:map.entrySet()){
            if(entry.getValue()==1)
            {
                diff.add(entry.getKey());
            }
        }
        return diff;
    }


    /**
     * 获取两个集合中不同的元素
     * @param arr1
     * @param arr2
     */
    public void getSetDiffrent(Integer[] arr1, Integer[] arr2) {
        Set<Integer> set1 = new HashSet<>(Arrays.asList(arr1));
        Set<Integer> set2 = new HashSet<>(Arrays.asList(arr2));
        Set<Integer> set3 = new HashSet<>(set2);

        //set集合有去重特性
        set3.addAll(set1);
        //retainAll():保留包含在指定 collection 中的元素
        set1.retainAll(set2);
        //	removeAll(); 移除 set 中那些包含在指定 collection 中的元素
        set3.removeAll(set1);
        System.out.println(set3);
    }
}

(2).测试类代码块

public static void main(String[] args) {

        ElenmentUnits elenmentUnits = new ElenmentUnits();

        /**
         * 1.获取两个数组中不同的元素
         */
        Integer nums1[] = {1, 2, 3, 5, 7, 23};
        Integer nums2[] = {16, 18, 2, 5, 12, 3,23};
        System.out.println("获取两个数组中不同的元素:");
        elenmentUnits.getSetDiffrent(nums1, nums2);

        /**
         * 2.获取两个List的不同元素
         */
        List<String> list1 =new ArrayList<String>();
        for(int i=1;i<10;i++) {
            list1.add(i+"");
        }
        List<String> list2 =new ArrayList<String>();
        for(int i=5;i<10;i++) {
            list2.add(i+"");
        }
        //方法一
        List<String> list3 = elenmentUnits.getListDiffrent(list1,list2);
        System.out.println(list1);
        System.out.println(list2);
        System.out.println("方法1--获取两个List的不同元素:\n"+list3);

        //方法二
        List<String> list4 =new ArrayList<String>();
        List<String> list5 =new ArrayList<String>();
        list1.forEach(l1->{
          if(list2.contains(l1)){
              // 获取相同同的元素
              list4.add(l1);
          }else {
              // 获取不同的元素
              list5.add(l1);
          }
       });
        System.out.println("获取两个List的相同的元素:\n"+list4);
        System.out.println("方法2--获取两个List的不同元素:\n"+list5);
    }

二、控制台输出

1.获取两个数组中不同的元素:
[16, 1, 18, 7, 12]
2.方法1--获取两个List的不同元素:
[1, 2, 3, 4]
3.获取两个List的相同的元素:
[5, 6, 7, 8, 9]
4.方法2--获取两个List的不同元素:
[1, 2, 3, 4]

posted @ 2022-07-06 10:13  [奋斗]  阅读(869)  评论(0编辑  收藏  举报