一、什麼是集合交集
集合交集指的是,對於兩個集合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-tw/n/227330.html
微信掃一掃
支付寶掃一掃