Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java找出数组中重复的数字


在 Java 中找出数组中的重复数字有多种实现方式。我将为您介绍三种常见的实现方式,并为每种方式提供详细的步骤和示例代码。请注意,以下示例代码仅供参考,实际应用中可能需要根据具体情况进行适当的调整和优化。

使用哈希表

步骤流程:

  1. 创建一个哈希表(HashMap)来存储数组中的数字及其出现次数。
  2. 遍历数组,将每个数字作为键,出现次数作为值,存储到哈希表中。
  3. 如果遇到重复的数字,更新该数字对应的值。
  4. 遍历哈希表,找出出现次数大于 1 的数字,即为重复数字。

示例代码:

import java.util.*;

public class FindDuplicatesUsingHashMap {
    public static List<Integer> findDuplicates(int[] nums) {
        Map<Integer, Integer> frequencyMap = new HashMap<>();
        List<Integer> duplicates = new ArrayList<>();

        for (int num : nums) {
            frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
        }

        for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
            if (entry.getValue() > 1) {
                duplicates.add(entry.getKey());
            }
        }

        return duplicates;
    }

    public static void main(String[] args) {
        int[] nums = {4, 3, 2, 7, 8, 2, 6, 5, 4};
        List<Integer> duplicates = findDuplicates(nums);
        System.out.println("Duplicates: " + duplicates);
    }
}

Maven 依赖坐标:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

Gradle 依赖坐标:

implementation 'org.apache.commons:commons-collections4:4.4'

排序后查找

步骤流程:

  1. 对数组进行排序。
  2. 遍历排序后的数组,找出相邻元素中相等的数字,即为重复数字。

示例代码:

import java.util.*;

public class FindDuplicatesUsingSorting {
    public static List<Integer> findDuplicates(int[] nums) {
        Arrays.sort(nums);
        List<Integer> duplicates = new ArrayList<>();

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1]) {
                duplicates.add(nums[i]);
            }
        }

        return duplicates;
    }

    public static void main(String[] args) {
        int[] nums = {4, 3, 2, 7, 8, 2, 6, 5, 4};
        List<Integer> duplicates = findDuplicates(nums);
        System.out.println("Duplicates: " + duplicates);
    }
}

使用布尔数组标记

步骤流程:

  1. 创建一个布尔数组,长度与输入数组的长度相同。
  2. 遍历输入数组,对于每个数字,将其对应位置的布尔值取反。
  3. 如果对应位置的布尔值已经为 true,说明该数字已经出现过,将其加入重复数字列表。

示例代码:

import java.util.*;

public class FindDuplicatesUsingBooleanArray {
    public static List<Integer> findDuplicates(int[] nums) {
        List<Integer> duplicates = new ArrayList<>();
        boolean[] seen = new boolean[nums.length];

        for (int num : nums) {
            if (seen[num - 1]) {
                duplicates.add(num);
            } else {
                seen[num - 1] = true;
            }
        }

        return duplicates;
    }

    public static void main(String[] args) {
        int[] nums = {4, 3, 2, 7, 8, 2, 6, 5, 4};
        List<Integer> duplicates = findDuplicates(nums);
        System.out.println("Duplicates: " + duplicates);
    }
}

以上是三种常见的在 Java 中找出数组中重复数字的实现方式。您可以根据自己的实际需求选择其中之一。每种实现方式都有其优缺点,具体选择取决于问题的复杂性和性能要求。

数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。例如,如果 a 是一个整型数组,a[i] 就是数组中 ...
sort()`方法是Java标准库提供的数组排序方法,它可以对数组中的元素进行升序排序。parallelSort()`方法是Java8引入的 ...
在Java中循环数组有多种方法,下面将介绍一些常见的方式以及它们的实现步骤流程和示例代码。###使用第三方库(如Guava)如果你想使用第三 ...
下面我将介绍三种常见的实现方式,并附上相应的示例代码以及可能用到的第三方库的Maven和Gradle依赖坐标。示例代码:Maven依赖坐标: ...
我将为您介绍几种常见的方法,包括使用循环、`Arrays`类、`StringJoiner`、`StringBuilder`、以及使用第三方库 ...