在Java中,求两个数组的交集可以通过多种方法实现,以下是几种常见的方法:
方法一:使用HashSet
import java.util.HashSet;
public class Intersection {
public static int[] intersection(int[] nums1, int[] nums2) {
HashSet
set1 = new HashSet<>(); for (int num : nums1) {
set1.add(num);
}
HashSet
resultSet = 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) {
Set
set1 = 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) {
ArrayList
list1 = new ArrayList<>(); for (int num : nums1) {
list1.add(num);
}
ArrayList
list2 = 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;
}
}
以上方法都可以用来求两个数组的交集,你可以根据具体的需求和场景选择合适的方法。需要注意的是,这些方法都会修改传入的数组,如果需要保留原数组,应该在操作前创建数组的副本。