Java 数组交集的实现代码

下面是Java数组交集的实现代码完整攻略。

实现思路

交集是指两个集合中都存在的元素,可以用两种方法来实现数组交集。

  • 嵌套循环:在第一个数组中循环遍历每个元素,在第二个数组中再循环遍历每个元素,如果两个元素相等,则为交集元素之一。
  • HashSet数据结构:使用HashSet将第一个数组中的元素都添加进去,然后遍历第二个数组,在HashSet中查找是否存在相同的元素。

方法1的时间复杂度是 $O(n^2)$,而方法2的时间复杂度是 $O(n)$,因此后者更加高效。

代码实现

方法1:嵌套循环

public static int[] intersection(int[] nums1, int[] nums2) {
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < nums1.length; i++) {
        for (int j = 0; j < nums2.length; j++) {
            if (nums1[i] == nums2[j] && !list.contains(nums1[i])) {
                list.add(nums1[i]);
            }
        }
    }
    int[] res = new int[list.size()];
    for (int i = 0; i < list.size(); i++) {
        res[i] = list.get(i);
    }
    return res;
}

这里使用了ArrayList来存储结果,对于每个元素都进行了一次遍历,所以时间复杂度是 $O(n^2)$ 。同时,使用了contains方法来判断某个元素是否已经存在于结果列表中,这个操作也是比较耗时的。

方法2:HashSet

public static int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> set1 = new HashSet<>();
    for (int num : nums1) {
        set1.add(num);
    }
    Set<Integer> set2 = new HashSet<>();
    for (int num : nums2) {
        if (set1.contains(num)) {
            set2.add(num);
        }
    }
    int[] res = new int[set2.size()];
    int i = 0;
    for (int num : set2) {
        res[i++] = num;
    }
    return res;
}

这里使用了HashSet数据结构来存储数组元素,时间复杂度是 $O(n)$。

示例说明

示例1

int[] nums1 = {4, 9, 5};
int[] nums2 = {9, 4, 9, 8, 4};
System.out.println(Arrays.toString(intersection(nums1, nums2)));

以上示例中,数组 nums1 中包含元素 49,数组 nums2 中包含元素 94,因此它们的交集应该是 [9, 4]

示例2

int[] nums1 = {1, 2, 2, 1};
int[] nums2 = {2, 2};
System.out.println(Arrays.toString(intersection(nums1, nums2)));

以上示例中,数组 nums1 中包含元素 12,数组 nums2 中包含元素 2,因此它们的交集应该是 [2]

希望这些示例能够帮助你更好地理解Java数组交集的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 数组交集的实现代码 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • JavaWeb乱码问题的终极解决方案(推荐)

    JavaWeb乱码问题的终极解决方案 问题描述 在JavaWeb开发过程中,经常会遇到乱码问题。例如,使用post方式提交中文数据时,后台接收到的数据却是乱码。 这个问题的根本原因是因为编解码不一致,导致前端提交的数据在后端被解析时出现了乱码。 解决方案 解决这个问题的终极解决方案,是将全站都使用UTF-8编解码。这包括了Java代码和Web页面都需要使用U…

    Java 2023年5月20日
    00
  • Java中的ArithmeticException是什么?

    ArithmeticException是Java中的一个异常类,用来表示算术异常,这个异常通常在进行数学运算时可能会出现,比如除数为0、模数为0等情况都会抛出这个异常。 ArithmeticException属于RuntimeException的子类,它表示在进行数学计算时抛出的异常,当出现这个异常时,程序会停止运行并抛出异常信息,使程序无法正常工作。 在J…

    Java 2023年4月27日
    00
  • 微信小程序http连接访问解决方案的示例

    下面先来介绍一下微信小程序中HTTP连接访问的问题。由于小程序是运行在微信客户端中的,因此它受到了微信小程序框架的一些限制,其中就包括网络请求的安全问题。如果小程序直接通过http协议进行网络请求,很容易产生安全风险,因此小程序只支持https协议。 解决这个问题,其实也不难,我们只需要在小程序的服务器端部署一个https协议的服务端口,这样小程序通过访问这…

    Java 2023年5月23日
    00
  • 关于struts2中Action名字的大小写问题浅谈

    下面是关于 struts2 中 Action 名字的大小写问题的攻略: 问题描述 在 struts2 的配置文件中,Action 的名字可以大小写混用,例如: <action name="Index" class="com.example.IndexAction"> <result>/index…

    Java 2023年5月20日
    00
  • struts2中一个表单中提交多个请求的例子(多个提交按钮)

    在struts2中实现一个表单中提交多个请求的例子,常见的方法是使用多个提交按钮,每个按钮对应一个请求。以下是详细的步骤: 1. 编写表单 首先在jsp页面中编写表单,并使用<s:submit>标签来生成提交按钮。每个不同的提交按钮会绑定不同的请求。例如: <s:form action="processForm">…

    Java 2023年5月20日
    00
  • Java实现定时任务的示例代码

    下面我将为你详细讲解一下“Java实现定时任务的示例代码”的完整攻略。 一、背景知识 在Java中,可以使用Timer类或ScheduledExecutorService类来实现定时任务。其中,Timer类是较为简单的一种方式,但该类有一些缺点:如果执行任务的时间太长,或者在任务执行期间抛出了异常,Timer可能会错过执行下一次任务的时间。因此,建议大家使用…

    Java 2023年5月19日
    00
  • 反射的实现原理是什么?

    反射(Reflection)是Java语言的一种特性,它使得程序可以在运行时自己检查自己的结构,获取对象信息和操作对象属性、方法等,非常灵活。本篇攻略将详细讲解Java中反射的实现原理及其使用方法,包括以下几个方面: 反射的实现原理 反射的应用场景 反射的使用方法 反射示例说明 1. 反射的实现原理 反射的实现原理是基于Java的类加载机制实现的。在Java…

    Java 2023年5月10日
    00
  • Springboot和Jpa实现学生CRUD操作代码实例

    下面我会详细讲解“Springboot和Jpa实现学生CRUD操作代码实例”的完整攻略。 一、前置知识 在进行本篇攻略之前,需要掌握以下的技术和知识: Spring Boot的基本使用方法; JPA的基本使用方法; MySQL数据库的基本使用方法。 如果你还不熟悉这些知识,可以先查看相关的官方文档或者参考相关的教程。 二、创建Spring Boot项目 首先…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部