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

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提供了便捷的数组操作方法。

java数组如何交集

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环境变量

下载并安装JDK 从Oracle官网或OpenJDK项目下载适合操作系统的JDK安装包。运行安装程序,按照提示完成安装,默认路径通常为C:\Program Files\Java\jdk-版本号。 配…

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…

java如何获取当前时间

java如何获取当前时间

获取当前时间的方法 在Java中,可以通过多种方式获取当前时间。以下是几种常见的方法: 使用 java.util.Date Date currentDate = new Date(); Syste…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…

java面试官如何面试别人

java面试官如何面试别人

考察基础知识 从Java核心概念入手,包括面向对象特性(封装、继承、多态)、集合框架(ArrayList vs LinkedList、HashMap实现原理)、异常处理机制、多线程(线程池、锁机制)等…