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日

相关文章

  • SpringMVC拦截器和异常处理器使用示例超详细讲解

    SpringMVC拦截器和异常处理器使用示例超详细讲解 在Spring MVC中,拦截器和异常处理器是两个非常重要的组件,它们可以帮助我们实现一些通用的功能,如日志记录、权限验证、异常处理等。本文将详细介绍如何使用拦截器和异常处理器,并提供两个示例说明。 拦截器 拦截器的作用 拦截器是Spring MVC中的一个组件,它可以在请求到达处理器之前或之后执行一些…

    Java 2023年5月17日
    00
  • JSP页面中文参数的传递(get和post方法分析)

    关于JSP页面中文参数的传递,我们需要了解以下几点: JSP页面中传递参数的方式一般有两种:get方法和post方法。 为了避免中文乱码问题,我们在处理传递的参数时需要对字符编码进行设置。 对于get方法传递的参数,可以使用URLEncoder对中文进行编码,而在JSP页面接收时可以使用URLDecoder进行解码,即可得到原始中文字符串。 对于post方法…

    Java 2023年6月15日
    00
  • javascript+html5+css3自定义弹出窗口效果

    “javascript+html5+css3自定义弹出窗口效果”主要可以通过以下步骤实现: 第一步:HTML部分 在HTML代码中,我们需要首先定义一个触发弹出窗口的按钮,用于触发弹出窗口的开启。同时我们需要在代码中定义一个 <div> 标签作为弹出窗口的容器。 示例代码如下: <!DOCTYPE html> <html>…

    Java 2023年6月15日
    00
  • java实现多个文件压缩成压缩包

    要将多个文件压缩成一个压缩包,可以使用Java的ZipOutputStream类。以下是详细攻略: 创建压缩包文件 首先,需要创建一个压缩包文件,可以使用Java的File类,并指定后缀名为zip。例如: File zipFile = new File("myarchive.zip"); 实例化ZipOutputStream对象 创建Zi…

    Java 2023年5月19日
    00
  • 详解java自定义类

    详解Java自定义类 在Java中,我们可以使用自定义类创建对象并使用。这些对象可以有自己的属性和方法。 创建一个Java自定义类 创建一个Java自定义类需要遵循以下步骤: 用 class 关键字定义类名。类名必须以大写字母开头,遵循驼峰命名法。 在类中定义属性。属性可以是任何数据类型,包括用户自定义类型。属性定义应该在方法之前。 在类中定义方法。方法是可…

    Java 2023年5月20日
    00
  • Spring中的spring.factories文件用法(Spring如何加载第三方Bean)

    在Spring中,有一个特殊的配置文件spring.factories,它可以用于指定Spring加载的应用程序上下文中的第三方Bean,而无需创建XML配置文件。下面详细介绍它的用法和加载过程: spring.factories的用法 spring.factories文件位于Spring项目的META-INF目录中,并且遵循标准Java属性文件格式。该文件…

    Java 2023年5月31日
    00
  • Sprint Boot @RefreshScope使用方法详解

    Spring Boot的@RefreshScope注解 在Spring Boot中,@RefreshScope注解用于实现动态刷新配置。通过使用@RefreshScope注解,可以在应用程序运行时动态地刷新配置,而不需要重启应用程序。 @RefreshScope注解的使用方法 以下是@RefreshScope注解的使用方法: 在需要动态刷新的Bean上添加@…

    Java 2023年5月5日
    00
  • 一文详解Java闭锁和栅栏的实现

    一文详解Java闭锁和栅栏的实现 1. 什么是闭锁和栅栏 在并发编程中,有时需要等待某个操作的完成,或者协调多个线程的执行。Java提供了闭锁(Latch)和栅栏(Barrier)两个机制来实现这种协调。 闭锁是一种同步工具,可以使线程等待一个或多个线程的操作完成。闭锁一般会在某个线程等待另一个线程完成任务时使用。 栅栏是一种同步工具,它允许一组线程在某个点…

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