在 Java 中找出数组中的重复数字有多种实现方式。我将为您介绍三种常见的实现方式,并为每种方式提供详细的步骤和示例代码。请注意,以下示例代码仅供参考,实际应用中可能需要根据具体情况进行适当的调整和优化。
步骤流程:
示例代码:
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'
步骤流程:
示例代码:
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);
}
}
步骤流程:
示例代码:
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 中找出数组中重复数字的实现方式。您可以根据自己的实际需求选择其中之一。每种实现方式都有其优缺点,具体选择取决于问题的复杂性和性能要求。