Java案例怎么判断数组重复值?

wen java案例 11

本文目录导读:

Java案例怎么判断数组重复值?

  1. 使用双重循环(最基础)
  2. 使用HashSet(最常用)
  3. 先排序再比较相邻元素
  4. 完整示例:找出所有重复值及其位置
  5. Java 8+ Stream方式
  6. 选择建议

在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
  • 可以修改原数组:使用排序方法

根据你的具体需求选择合适的方案即可。

抱歉,评论功能暂时关闭!