You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Java数组重复元素查找程序使其仅输出重复元素一次?

解决Java数组重复元素仅输出一次的问题

你现在的问题是原双层循环会把同一个重复元素打印好几次,比如数组里的9出现了6次,程序会反复输出9对吧?核心就是要记住哪些元素已经输出过,避免重复打印。下面给你两种简单的修改思路:

方法一:用集合记录已输出元素(最直观)

我们可以用HashSet当一个“小本子”,专门记已经打印过的重复元素。每次找到重复值时,先查这个“小本子”:如果没记过就打印,然后把元素记进去;如果已经有记录,直接跳过就行。

修改后的完整代码:

import java.util.HashSet;
import java.util.Set;

public class ArrayTest{

    public static void main(String[] args) {

        int array[] = {32,3,3,4,5,6,88,98,9,9,9,9,9,9,1,2,3,4,5,6,4,3,7,7,8,8,88,88};
        // 用来记录已经打印过的重复元素
        Set<Integer> printedElements = new HashSet<>();

        for(int i= 0;i<array.length-1;i++){
            for(int j=i+1;j<array.length;j++){
                if(array[i] == array[j] && i != j){
                    // 检查这个元素有没有被打印过
                    if(!printedElements.contains(array[j])){
                        System.out.println("重复元素:" + array[j]);
                        printedElements.add(array[j]);
                    }
                }
            }
        }
    }
}

方法二:先排序再遍历(节省额外空间)

如果不想用额外的集合,我们可以先把数组排序,这样重复元素会紧紧挨在一起。然后遍历数组,只在第一次遇到连续重复的时候输出,之后的重复直接跳过就好。

修改后的代码:

import java.util.Arrays;

public class ArrayTest{

    public static void main(String[] args) {

        int array[] = {32,3,3,4,5,6,88,98,9,9,9,9,9,9,1,2,3,4,5,6,4,3,7,7,8,8,88,88};
        // 先排序,让重复元素连续排列
        Arrays.sort(array);

        // 记录上一个输出的重复元素,初始设为数组中不可能出现的值
        int lastPrinted = Integer.MIN_VALUE;

        for(int i=1;i<array.length;i++){
            if(array[i] == array[i-1] && array[i] != lastPrinted){
                System.out.println("重复元素:" + array[i]);
                lastPrinted = array[i];
            }
        }
    }
}

两种方法的小说明:

  • 方法一逻辑简单,不会改变原数组的顺序,但需要额外的集合空间存储已输出元素;
  • 方法二不需要额外空间(仅用几个变量),但会改变原数组的顺序,如果要保留原数组,可以先复制一份再排序。

内容的提问来源于stack exchange,提问作者user8286771

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:10:26