Java数组元素配对存入ArrayList嵌套集合的输出异常排查
数组两两配对存入嵌套ArrayList的问题分析与修复
错误原因
- 复用单个ArrayList实例:你代码里的
al是全局静态对象,所有添加到finalList的都是同一个al的引用。后续执行al.clear()、al.remove(1)时,finalList里的所有元素都会同步变化——因为它们指向内存中同一个集合对象,不是独立的副本。 - 过早清空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
相关产品推荐
相关产品推荐

