一、概述
在編程中,取交集(Intersection)是一個經常使用的操作。在Java中,我們可以使用不同的數據結構和演算法來實現取交集的功能。本文將詳細介紹Java取交集的實現方式,包括數組、集合和Stream等不同的方案,並且給出完整的代碼示例。
二、數組實現取交集
數組是Java中最基本的數據結構之一,也是最簡單的實現取交集的方式。
實現方式:
public static int[] intersect(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); int i = 0, j = 0, k = 0; while (i < nums1.length && j < nums2.length) { if (nums1[i] < nums2[j]) { i++; } else if (nums1[i] > nums2[j]) { j++; } else { nums1[k++] = nums1[i++]; j++; } } return Arrays.copyOfRange(nums1, 0, k); }
以上代碼先將兩個數組進行排序,然後使用雙指針移動比較得出交集。
三、集合實現取交集
Java中的集合也可以很方便地實現取交集。
實現方式:
public static Set<Integer> intersect(Set<Integer> set1, Set<Integer> set2) { Set<Integer> result = new HashSet<>(); for (Integer integer : set1) { if (set2.contains(integer)) { result.add(integer); } } return result; }
以上代碼使用了Java中的Set類,通過contains方法判斷兩個集合是否相交,並將結果存儲在一個新的Set中。
四、Stream實現取交集
Java 8中的新特性Stream也可以實現取交集的功能。
實現方式:
public static Set<Integer> intersect(int[] nums1, int[] nums2) { Set<Integer> set1 = Arrays.stream(nums1).boxed().collect(Collectors.toSet()); Set<Integer> set2 = Arrays.stream(nums2).boxed().collect(Collectors.toSet()); return set1.stream().filter(set2::contains).collect(Collectors.toSet()); }
以上代碼將數組轉換為Set,然後通過Stream中的filter方法篩選出相交的元素,最後將結果存儲在一個新的Set中。
五、總結
本文介紹了Java取交集的三種實現方式,分別是使用數組、集合和Stream。通過比較這三種方式,我們可以發現不同的數據結構和演算法會影響程序的實現效率和易用性。在實際開發中,我們需要結合具體的場景來選擇最合適的方式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279019.html