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

Java数组元素配对存入ArrayList嵌套集合的输出异常排查

数组两两配对存入嵌套ArrayList的问题分析与修复

错误原因

  1. 复用单个ArrayList实例:你代码里的al是全局静态对象,所有添加到finalList的都是同一个al的引用。后续执行al.clear()、al.remove(1)时,finalList里的所有元素都会同步变化——因为它们指向内存中同一个集合对象,不是独立的副本。
  2. 过早清空finalList:外层循环结束时调用finalList.clear(),导致刚添加的配对集合被直接清空,打印的内容其实是被修改后的引用集合,自然和预期不符。

修复后的代码

import java.util.ArrayList;

public class Test {
    static int[] arr = {2,4,6,8,10};

    public static void makePairs() {
        ArrayList<ArrayList<Integer>> finalList;
        for(int i = 0; i < arr.length - 1; i++) {
            finalList = new ArrayList<>();
            ArrayList<Integer> al;
            for(int j = i + 1; j < arr.length; j++) {
                al = new ArrayList<>();
                al.add(arr[i]);
                al.add(arr[j]);
                finalList.add(al);
            }
            System.out.println(finalList);
        }
    }

    public static void main(String[] args) {
        makePairs();
    }
}

关键改动说明

  • 移除全局的al和finalList,改为在循环内创建局部对象,确保每次循环的集合都是独立实例,不会互相干扰。
  • 内层循环每次新建al,存入当前配对的两个元素后直接添加到finalList,无需再做remove或clear操作,逻辑更简洁。
  • 外层循环每次新建finalList存储当前起始元素的所有配对,打印后无需清空,下一次循环会自动创建新集合。

输出结果

[[2,4], [2,6], [2,8], [2,10]]
[[4,6], [4,8], [4,10]]
[[6,8], [6,10]]
[[8,10]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:50:30