本文目录导读:

在Java中判断数组是否有重复值有多种方法,我为你整理了几种常见的实现方式:
使用双重循环(最基础)
public static boolean hasDuplicate(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
return true; // 发现重复
}
}
}
return false; // 没有重复
}
优点:简单易懂
缺点:效率低,O(n²)
使用HashSet(最常用)
import java.util.HashSet;
import java.util.Set;
public static boolean hasDuplicate(int[] arr) {
Set<Integer> set = new HashSet<>();
for (int num : arr) {
if (!set.add(num)) { // add返回false说明已存在
return true;
}
}
return false;
}
优点:效率高,O(n)
缺点:需要额外内存
先排序再比较相邻元素
import java.util.Arrays;
public static boolean hasDuplicate(int[] arr) {
Arrays.sort(arr); // 先排序
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] == arr[i + 1]) {
return true;
}
}
return false;
}
优点:实现简单
缺点:会改变原数组顺序
完整示例:找出所有重复值及其位置
import java.util.*;
public class ArrayDuplicateFinder {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 3, 7, 1, 9, 5};
System.out.println("原数组: " + Arrays.toString(arr));
findAndPrintDuplicates(arr);
}
public static void findAndPrintDuplicates(int[] arr) {
Map<Integer, List<Integer>> map = new HashMap<>();
// 遍历数组,记录每个值的出现位置
for (int i = 0; i < arr.length; i++) {
map.computeIfAbsent(arr[i], k -> new ArrayList<>()).add(i);
}
// 找出并输出重复的值
boolean hasDuplicate = false;
for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {
List<Integer> positions = entry.getValue();
if (positions.size() > 1) {
hasDuplicate = true;
System.out.println("值 " + entry.getKey() + " 重复出现,位置在: " + positions);
}
}
if (!hasDuplicate) {
System.out.println("没有重复值");
}
}
}
Java 8+ Stream方式
import java.util.Arrays;
import java.util.stream.Collectors;
public static boolean hasDuplicate(int[] arr) {
return Arrays.stream(arr)
.boxed()
.collect(Collectors.toSet())
.size() != arr.length;
}
注意:这种方式虽然代码简洁,但会遍历整个数组,无法提前退出。
选择建议
- 大数据量:使用HashSet方法
- 小数组且不想用集合:使用双重循环
- 需要保持原数组不变:使用HashSet
- 可以修改原数组:使用排序方法
根据你的具体需求选择合适的方案即可。