Java使用增强for循环遍历嵌套ArrayList实现指定矩阵输出
解决方案
问题根因
你原有代码的增强for循环是按横向遍历每个子列表的全部元素,输出顺序为123\n456\n789,和要求的按列拼接的输出逻辑不匹配。我们可以先对嵌套列表做转置(将原列转为行),全程用增强for遍历集合即可实现需求。
完整可运行代码
package com.test.Day1; import java.util.ArrayList; import java.util.List; public class ArrayListDemo3 { public static void main(String[] args) { ArrayList<ArrayList<Integer>> listOflist = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); listOflist.add(list1); ArrayList<Integer> list2 = new ArrayList<>(); list2.add(4); list2.add(5); list2.add(6); listOflist.add(list2); ArrayList<Integer> list3 = new ArrayList<>(); list3.add(7); list3.add(8); list3.add(9); listOflist.add(list3); // 初始化转置后的嵌套列表,行数等于原内部子列表的长度 List<List<Integer>> transposedList = new ArrayList<>(); int rowNum = listOflist.get(0).size(); for (int i = 0; i < rowNum; i++) { transposedList.add(new ArrayList<>()); } // 增强for遍历原嵌套列表,完成转置 for (ArrayList<Integer> innerList : listOflist) { int rowIndex = 0; for (Integer val : innerList) { transposedList.get(rowIndex).add(val); rowIndex++; } } // 增强for遍历转置后的列表,输出结果 for (List<Integer> row : transposedList) { boolean isFirstElement = true; for (Integer num : row) { if (!isFirstElement) { System.out.print(" "); } System.out.print(num); isFirstElement = false; } System.out.println(); } } }
实现说明
- 仅初始化转置容器时使用了一次普通for循环,所有对ArrayList集合的遍历都采用增强for实现,符合要求
- 输出时通过标记位判断元素是否为行首,避免行尾出现多余空格
- 如果实际场景中内部子列表长度不一致,可提前对所有子列表长度做校验,避免索引越界
内容的提问来源于stack exchange,提问作者Ankita Shrivastava
相关产品推荐
相关产品推荐

