当前位置:首页 > Java

java数组如何交集

2026-03-25 11:16:40Java

使用循环和条件判断实现数组交集

通过遍历第一个数组,检查每个元素是否存在于第二个数组中,将匹配的元素添加到结果集合中。

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)查找特性,可以显著提高大数组的交集计算效率。

java数组如何交集

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

利用流式操作和函数式编程风格简洁地实现数组交集。

java数组如何交集

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方法。

标签: 数组java
分享给朋友:

相关文章

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

java如何给数组赋值

java如何给数组赋值

数组赋值的几种方法 在Java中,可以通过多种方式为数组赋值。以下是常见的几种方法: 静态初始化 int[] array1 = {1, 2, 3, 4, 5}; String[] array2 =…

如何导入java项目

如何导入java项目

导入Java项目的方法 使用IDE导入(如IntelliJ IDEA或Eclipse) 打开IDE后选择导入现有项目,导航至项目根目录(包含pom.xml或build.gradle的文件位置)。IDE…

如何启用java

如何启用java

启用 Java 的方法 检查 Java 是否已安装 在命令行或终端输入 java -version,如果显示版本信息,说明 Java 已安装。若未安装,需从 Oracle 官网 或 OpenJDK 下…

java如何返回数组

java如何返回数组

返回数组的方法 在Java中,可以通过多种方式返回数组。以下是几种常见的方法: 直接返回数组 定义一个方法,返回类型为数组类型,直接在方法内部创建并返回数组。 public int[] getI…

java如何入门

java如何入门

学习基础语法 从Java的基础语法开始,包括变量、数据类型、运算符、控制结构(if-else、for循环、while循环)等。可以通过官方文档或入门教程学习。 安装开发环境 下载并安装JDK(J…