1. 程式人生 > >ArrayList的交集,差集,並集,去重並集

ArrayList的交集,差集,並集,去重並集

//建立兩個ArrayList並新增元素
        List<Integer> list1 = new ArrayList<Integer>();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(4);

        List<Integer> list2 = new ArrayList<Integer>();
        list2.add(3);
        list2.add(4);
        list2.add(5);
        list2.add(6);

判斷交集:

  list2.retainAll(list1);
        if(list1.size()>0){
            System.out.println("存在交集");
        }

retainAll()方法通過檢測list1的大小,大小改變返回true(沒有交集返回true),大小不變返回false(兩集合相同返回false)。不能通過true或false確定是否存在交集,只能通過list1.seze()判斷。

輸出交集:可以通過雙重for迴圈把相同結果輸出;下面使用了set去重。

        //用set去重特點求交集
        HashSet<Integer> hashSet=new HashSet<Integer>();
        //list3儲存交集
        List<Integer> list3 = new ArrayList<Integer>();
        for (Integer i:list1
             ) {
            hashSet.add(i);
        }
        for (Integer i:list2
                ) {
            if(hashSet.add(i)==false){//add失敗則認為有相同元素,存放到list3
                list3.add(i);
            }
        }
        System.out.println(list3);

差集:

        // 差集,屬於list1而不屬於list2
        list1.removeAll(list2);
        System.out.println("差集:"+list1);

並集:

        // 並集
        list1.addAll(list2);
        System.out.println("並集:"+list1);

去重並集:

        // 無重複並集
        list2.removeAll(list1);
        list1.addAll(list2);
        for (Integer i : list1) {
            System.out.println(i);
        }