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

如何按索引顺序遍历子列表长度不同的二维List?

解决二维List子列表长度不同时的按列遍历问题

嘿,我来帮你搞定这个问题~你的核心困扰是原循环的逻辑逻辑出错了,既没法遍历到长度较长的子列表的后续元素,还暗藏索引越界的风险。

原代码的问题分析

你原来的外层循环条件是:

for(int i =0; i<myList.get(i).size(); i++)

这个逻辑完全走偏了:

  • i 是你想用来表示列索引的变量,但myList.get(i)取的是第i个子列表(行)的长度,这两者根本没有关联。
  • 当i增加到2时,myList.get(2).size()是3,但此时去访问myList.get(0).get(2)会直接抛出IndexOutOfBoundsException,因为第一个子列表只有2个元素。
  • 最关键的是,原循环只会遍历到第一个子列表的长度(仅2次循环),所以第3列的元素7根本没机会被处理到。

正确的解决方案

要实现按列遍历且兼容子列表长度不同的情况,我们需要:

  1. 先找到所有子列表中最长的长度,确定需要遍历多少列。
  2. 外层循环遍历每一列索引,内层循环遍历每个子列表。
  3. 对每个子列表,检查当前列索引是否在它的有效范围内,有效则输出对应元素。

修正后的完整代码

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<List<Integer>> myList = new ArrayList<>(3);

        for(int i=0; i < 3; i++) {
            myList.add(new ArrayList<>());
        }

        myList.get(0).add(1); // 0,0
        myList.get(0).add(4); //0,1

        myList.get(1).add(2); // 1,0
        myList.get(1).add(5); // 1,1

        myList.get(2).add(3);// 2,0
        myList.get(2).add(6); //2,1
        myList.get(2).add(7); //2,2

        // 第一步:获取最长子列表的长度,确定需要遍历的列数
        int maxColumnCount = 0;
        for (List<Integer> subList : myList) {
            if (subList.size() > maxColumnCount) {
                maxColumnCount = subList.size();
            }
        }

        // 第二步:按列遍历,兼容子列表长度差异
        for (int colIndex = 0; colIndex < maxColumnCount; colIndex++) {
            for (List<Integer> subList : myList) {
                // 检查当前子列表是否有该列的元素,避免索引越界
                if (colIndex < subList.size()) {
                    System.out.println(subList.get(colIndex));
                }
            }
        }
    }
}

输出结果

运行这段代码后,就能得到你期望的输出:

1
2
3
4
5
6
7

补充说明

如果你习惯用索引遍历内层循环,也可以把内层循环改成这样,效果完全一样:

for (int colIndex = 0; colIndex < maxColumnCount; colIndex++) {
    for (int rowIndex = 0; rowIndex < myList.size(); rowIndex++) {
        List<Integer> subList = myList.get(rowIndex);
        if (colIndex < subList.size()) {
            System.out.println(subList.get(colIndex));
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:30:57