在Java中,求两个数组的交集可以通过多种方法实现,以下是几种常见的方法:
方法一:使用HashSet
import java.util.HashSet;public class Intersection {public static int[] intersection(int[] nums1, int[] nums2) {HashSetset1 = new HashSet<>(); for (int num : nums1) {set1.add(num);}HashSetresultSet = new HashSet<>(); for (int num : nums2) {if (set1.contains(num)) {resultSet.add(num);}}int[] result = new int[resultSet.size()];int index = 0;for (int num : resultSet) {result[index++] = num;}return result;}}
import java.util.Arrays;import java.util.HashSet;import java.util.Set;public class Intersection {public static int[] intersection(int[] nums1, int[] nums2) {Setset1 = new HashSet<>(Arrays.asList(nums1)); set1.retainAll(Arrays.asList(nums2));int[] result = new int[set1.size()];int index = 0;for (int num : set1) {result[index++] = num;}return result;}}

方法三:使用排序和二分查找
import java.util.Arrays;public class Intersection {public static int[] intersection(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int[] result = new int[Math.min(nums1.length, nums2.length)];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 {result[k++] = nums1[i++];j++;}}return Arrays.copyOf(result, k);}}
方法四:使用ArrayList的retainAll方法
import java.util.ArrayList;public class Intersection {public static int[] intersection(int[] nums1, int[] nums2) {ArrayListlist1 = new ArrayList<>(); for (int num : nums1) {list1.add(num);}ArrayListlist2 = new ArrayList<>(); for (int num : nums2) {list2.add(num);}list1.retainAll(list2);int[] result = new int[list1.size()];for (int i = 0; i < list1.size(); i++) {result[i] = list1.get(i);}return result;}}
以上方法都可以用来求两个数组的交集,你可以根据具体的需求和场景选择合适的方法。需要注意的是,这些方法都会修改传入的数组,如果需要保留原数组,应该在操作前创建数组的副本。
