利用了Java 8的Stream API,代碼簡潔且效率高
import java.util.stream.Collectors;
import java.util.List;
import java.util.HashSet;
import java.util.Set;public class ListIntersection {public static List<Long> findIntersection(List<Long> list1, List<Long> list2) {Set<Long> set2 = new HashSet<>(list2);return list1.stream().filter(set2::contains).collect(Collectors.toList());}public static void main(String[] args) {List<Long> list1 = List.of(1L, 3L, 5L, 7L, 9L);List<Long> list2 = List.of(3L, 6L, 9L, 12L);List<Long> intersection = findIntersection(list1, list2);System.out.println("交集結果: " + intersection);}
}
步驟解釋:
- 轉換為集合:將第二個列表?
list2
?轉換為一個?Set
,以便快速查找元素是否存在。 - 流過濾:使用?
stream()
?方法將第一個列表轉換為一個流,并使用?filter()
?方法篩選出在集合中包含的元素。 - 收集結果:通過?
collect(Collectors.toList())
?將篩選后的流收集到一個新的列表中,即為兩個列表的交集。
這種方法的時間復雜度為 O(n + m),其中 n 和 m 分別是兩個列表的長度,適合處理較大的數據集。