美文网首页
拿取两个同类型集合的完全不同的元素

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

作者: 浪客行1213 | 来源:发表于2018-12-12 17:33 被阅读0次

    求俩个集合的差集


    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

    相关文章

      网友评论

          本文标题:拿取两个同类型集合的完全不同的元素

          本文链接:https://www.haomeiwen.com/subject/esephqtx.html