java 取交集方法retainAll的實現

java 取交集方法retainAll

有兩個集合newCoures和oldCourses,判斷這兩個集合是否包含相同的對象或元素,

可以使用retainAll方法:

oldCourses.retainAll(newCoures)

如果存在相同元素,oldCourses中僅保留相同的元素。

如果不存在相同元素,oldCourse會變為空。

如果有多個集合oldCourses1、oldCourses2、oldCourses3等,分別與newCourses比較,應該將newCourses統一放在後面,像這樣:

oldCourses1.retainAll(newCoures);
oldCourses2.retainAll(newCoures);
oldCourses3.retainAll(newCoures);
public class Test {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        List<String> list3 = new ArrayList<String>();
        for (int i = 0; i < 20; i++) {
            list1.add(i+"");
            if(i%2 == 0) {
                list2.add(i+"");
            }
            list3.add(i+"@");
        }
        // list1 與 list2 存在相同元素,list1集合隻保留list2中存在的元素
        list1.retainAll(list2);
        if(list1.isEmpty()) {
            System.out.println("不包含");
        } else {
            System.out.println("包含");
        }
        System.out.println(list1);
        // list1 與 list3 不存在相同元素,list1集合變為空
        list1.retainAll(list3);
        if(list1.isEmpty()) {
            System.out.println("不包含");
        } else {
            System.out.println("包含");
        }
        System.out.println(list1);
    }
}

運行結果如下:

這裡寫圖片描述

retainall的問題

在調用java中的retainall時遇到個問題

代碼如下:

public static ArrayList<Integer> res_and(ArrayList<Integer> s1,ArrayList<Integer> s2)
 {
  s1.retainAll(s2);
//  System.out.println("s1=");
//  System.out.println(s1);
  return s1;

我定義瞭一個函數,用來求出s1和s2共有的部分,將其保存在s1中。

但是貌似這麼寫會導致s1中重復元素會重復出現兩次。

解決辦法:

在返回前加上一句

s1  = new ArrayList<Integer>(new HashSet<Integer>(s1));

即可。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: