java判斷兩個集合是否有相同元素Collections.disjoint()

Java接口定義

disjoint(Collection<?> c1, Collection<?> c2) 方法返回true表示兩個collection中沒有相同的元素。

disjoint()方法不需要傳入類型相同的集合,只要實現collection接口即可。如果 c1 集合和 c2 集合沒有相同元素返回true。如果傳入參數為 null 會引發空指針異常。

disjoint在判斷過程中對執行速度做了優化,因此比我們直接遍歷兩個list的效率要更高,尤其是第一個Collection為Set的情況下。具體實現邏輯,簡單過一下源碼:

代碼的設計思想:

  • c1是Set則遍歷c2,這樣做的意圖是因為Set的contains方法效率更高,Set本質是只有key沒有value的Map,調用contains方法時其實調用的是map.containsKey()方法。
  • c1和c2都不是Set情況下,如果兩個collcoection沒有元素返回true,如果存在一個以上collcoection大小大于零,遍歷較小的集合,這樣做可以提升遍歷速度。注釋中還給了理論案例,比較好理解。

測試代碼示例

List<String> list1 = new ArrayList<String>();
        list1.add("111");
        list1.add("222");
        list1.add("333");
        list1.add("444");

        List<String> list2 = new Vector<String>();
        list2.add("444");
        list2.add("555");

        List list3 = new LinkedList();
        list3.add(111);
        list3.add("~~~");

        Set<String> list4 = new HashSet<String>();
        list4.add("888");
        list4.add("999");

        Set<String> list5 = new HashSet<String>();
        list5.add("www");
        list5.add(null);

        List list6 = new ArrayList();

        List list7 = new ArrayList();

        Set<String> list8 = null;

        System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list1, list2) ? "否" : "是"));

        System.out.println("list1和list3是否有相同元素 : " + (Collections.disjoint(list1, list3) ? "否" : "是"));

        System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list1, list4) ? "否" : "是"));

        System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list4, list5) ? "否" : "是"));

        System.out.println("list6和list7是否有相同元素 : " + (Collections.disjoint(list6, list7) ? "否" : "是"));

        //下面代碼引發空指針異常
//        System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list4, list8) ? "否" : "是"));

結果

list1和list2是否有相同元素 : 是
list1和list3是否有相同元素 : 否
list1和list4是否有相同元素 : 否
list4和list5是否有相同元素 : 否
list6和list7是否有相同元素 : 否
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容