一、什麼是集合交集
集合交集指的是,對於兩個集合A和B,找出在A和B中均存在的元素,所組成的新集合。這個概念在算法設計、數據處理等方面都非常重要。
二、使用內置方法實現集合交集
Java內置了一個方法Collections.retainAll(),可以方便地計算兩個集合的交集。
Set<Integer> set1 = new HashSet<>(); set1.add(1); set1.add(2); set1.add(3); set1.add(4); Set<Integer> set2 = new HashSet<>(); set2.add(3); set2.add(4); set2.add(5); Set<Integer> intersection = new HashSet<>(set1); intersection.retainAll(set2); System.out.println(intersection); // 輸出 [3, 4]
三、實現自定義的集合交集算法
除了使用內置方法,也可以實現自定義的集合交集算法。
最簡單的方法是使用兩個for循環。對於第一個集合的每個元素,都遍歷第二個集合,看是否存在相同元素。如果存在,則把這個元素加入交集。
Set<Integer> set1 = new HashSet<>(); set1.add(1); set1.add(2); set1.add(3); set1.add(4); Set<Integer> set2 = new HashSet<>(); set2.add(3); set2.add(4); set2.add(5); Set<Integer> intersection = new HashSet<>(); for (Integer elem1 : set1) { for (Integer elem2 : set2) { if (elem1.equals(elem2)) { intersection.add(elem1); break; } } } System.out.println(intersection); // 輸出 [3, 4]
以上代碼的時間複雜度是O(n^2)。如果集合較大,性能會比較差。
另一種實現方式是使用Java 8 Stream API。首先把兩個集合轉換成Stream,然後使用filter()方法篩選出交集元素,最後把結果轉換成集合。
Set<Integer> set1 = new HashSet<>(); set1.add(1); set1.add(2); set1.add(3); set1.add(4); Set<Integer> set2 = new HashSet<>(); set2.add(3); set2.add(4); set2.add(5); Set<Integer> intersection = set1.stream() .filter(set2::contains) .collect(Collectors.toSet()); System.out.println(intersection); // 輸出 [3, 4]
這個實現方式的時間複雜度是O(n)。使用Stream API的好處是代碼簡潔、易於閱讀、易於維護,而且執行效率還比普通的for循環高。
四、總結
本文介紹了Java實現兩個集合取交集的多種方式,包括使用內置方法和自定義算法。其中,Stream API的實現方式比較優美和高效,也是值得推薦的做法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/227330.html