拿取两个同类型集合的完全不同的元素

2018-12-12  本文已影响0人  浪客行1213

求俩个集合的差集


1):应用场景  

    集合 list1  中有元素 1,2,4;

    集合 list2 中有元素 2,3;

    期望 得到一个新集合 list3 元素有 1,3,4;

2):代码

 List<Integer> list1 = new ArrayList<>();

    list1.add(1);

    list1.add(2);

    list1.add(4);

List<Integer> list2 = new ArrayList<>();

    list2.add(3);

    list2.add(2);

List<Integer> list3 = new ArrayList<>();

1.利用 HashMap 键 唯一的 特性    键是先入为主的键 值是后来居上的值 

Map<Integer, Integer> map = new HashMap<Integer,Integer>();

    for (Integer i : list1) {

将集合一中的元素作为map的键存入

            map.put(i, 1);
    }
for (Integer i : list2) {

判断 集合2中是否有与集合1重复的元素 重复元素改值 作为后期区分依据

     if(map.get(i)!=null) {
          map.put(i, 2);
            continue;
       }

集合2中没有重复的元素加入集合3

       list3.add(i);
     }

遍历集合

 for(Map.Entry<Integer, Integer> entry:map.entrySet())  {

值为1的  对应的键就是 集合1中 没有与集合2重复的元素

            if(entry.getValue()==1) {

加入集合3

                list3.add(entry.getKey());

            }

        }

打印集合3  结果  3,1,4;

2.利用集合自身的    removeAll()/retainAll();/addAll();

    新建一个集合暂存数据

    List<Integer> temp = new ArrayList<>();

            temp.addAll(list1);

       求两个集合的并集 

            list1.addAll(list2);

        求两个集合的交集

            list2.retainAll(temp);

        并集与交集的差集

            list1.removeAll(list2);

            for (Integer integer : list1) {

                    System.out.println(integer);

            }

打印结果 1,4,3;


注意:如果集合中的元素是对象的时候 记得重写 对象的equals()和hashCode();

     

浪客行1213的简书                                                   


XHH
上一篇 下一篇

猜你喜欢

热点阅读