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

前言

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

一、代码块内容

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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).测试类代码块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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 @   [奋斗]  阅读(882)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
历史上的今天:
2021-07-06 Oracle 创建表空间及用户授权、dmp数据导入、表空间、用户删除
点击右上角即可分享
微信分享提示