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

Java冒泡排序存每轮迭代结果到ArrayList出现重复如何解决

问题原因

  • Java中数组是引用数据类型,你代码中全程操作的都是同一个age数组对象,调用fe.add(age)时,只是把age数组的内存地址存入了ArrayList,并没有拷贝数组的实际内容。
  • 第二轮冒泡迭代时修改了同一个age数组的内容,会导致ArrayList里之前存入的地址指向的内容同步被修改,最终列表里两个位置存的都是同一个数组的地址,指向的都是第二轮迭代结束后的数组值,所以输出两次相同结果。

修复方案

每次把数组存入ArrayList前,生成当前数组的副本存入即可,修改fe.add(age)这行代码为:

fe.add(Arrays.copyOf(age, age.length));

修改后完整运行代码如下:

public static void main(String[] args) {
    Integer[] age = {5,4,3,2,1};
    ArrayList<Integer[]> fe = new ArrayList<Integer[]>();
    
    for(int i=0;i<2;i++)
    {
        for(int ii=1;ii<5;ii++)
        {
            if(age[ii]<age[ii-1])
            {
                int x = age[ii];                    
                age[ii]=age[ii-1];
                age[ii-1]=x;
            }
        }
        
        System.out.println("result "+Arrays.toString(age)+"\n");
        // 存入数组副本而非原数组引用
        fe.add(Arrays.copyOf(age, age.length));                            
    }
    for(Integer[] f : fe)
    {
        System.out.print(Arrays.toString(f));
    }
}

运行后即可得到预期输出[4, 3, 2, 1, 5][3, 2, 1, 4, 5]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:36:03