java数组如何交集
使用循环和条件判断实现数组交集
通过遍历第一个数组,检查每个元素是否存在于第二个数组中,将匹配的元素添加到结果集合中。
import java.util.ArrayList;
import java.util.List;
public class ArrayIntersection {
public static List<Integer> findIntersection(int[] arr1, int[] arr2) {
List<Integer> result = new ArrayList<>();
for (int num1 : arr1) {
for (int num2 : arr2) {
if (num1 == num2) {
result.add(num1);
break;
}
}
}
return result;
}
}
使用HashSet提高效率
利用HashSet的O(1)查找特性,可以显著提高大数组的交集计算效率。

import java.util.HashSet;
import java.util.Set;
public class ArrayIntersection {
public static Set<Integer> findIntersection(int[] arr1, int[] arr2) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> result = new HashSet<>();
for (int num : arr1) {
set1.add(num);
}
for (int num : arr2) {
if (set1.contains(num)) {
result.add(num);
}
}
return result;
}
}
使用Java 8 Stream API
利用流式操作和函数式编程风格简洁地实现数组交集。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayIntersection {
public static List<Integer> findIntersection(int[] arr1, int[] arr2) {
List<Integer> list1 = Arrays.stream(arr1).boxed().collect(Collectors.toList());
List<Integer> list2 = Arrays.stream(arr2).boxed().collect(Collectors.toList());
return list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
}
}
处理对象数组的交集
当数组元素为自定义对象时,需要重写equals和hashCode方法才能正确比较。
import java.util.HashSet;
import java.util.Set;
class Person {
String name;
int age;
// 构造函数、getter/setter省略
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return 31 * name.hashCode() + age;
}
}
public class ArrayIntersection {
public static Set<Person> findIntersection(Person[] arr1, Person[] arr2) {
Set<Person> set1 = new HashSet<>(Arrays.asList(arr1));
Set<Person> result = new HashSet<>();
for (Person p : arr2) {
if (set1.contains(p)) {
result.add(p);
}
}
return result;
}
}
使用Apache Commons Lang库
第三方库Apache Commons Lang提供了便捷的数组操作方法。
import org.apache.commons.lang3.ArrayUtils;
import java.util.HashSet;
import java.util.Set;
public class ArrayIntersection {
public static Set<Integer> findIntersection(int[] arr1, int[] arr2) {
Set<Integer> set1 = new HashSet<>(ArrayUtils.toObject(arr1));
Set<Integer> result = new HashSet<>();
for (int num : arr2) {
if (set1.contains(num)) {
result.add(num);
}
}
return result;
}
}
以上方法各有优缺点,根据具体场景选择最合适的实现方式。对于小数组,简单循环即可;对于大数组,HashSet方法更高效;需要代码简洁时,Stream API是良好选择;处理复杂对象时,需确保正确实现equals和hashCode方法。






