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

Java中2D List转2D ArrayList及矩阵对角线绝对差实现求助

搞定2D List转2D ArrayList,顺便修正对角线差值计算的问题

嘿,我来帮你理清楚这个问题,先解决你最关心的2D List转2D ArrayList的部分,然后再把你代码里的bug给修正掉~

一、2D List转2D ArrayList超简单

其实根本不用复杂的循环,因为ArrayList本身就是List接口的实现类,直接用它的构造方法就能一键转换:

// 直接把原2D List丢进ArrayList的构造器,一步到位
List<List<Integer>> arrList = new ArrayList<>(arr);

要是你需要对每一行做额外处理(比如过滤某些元素),那可以手动逐行复制:

List<List<Integer>> arrList = new ArrayList<>();
for (List<Integer> row : arr) {
    // 这里可以加对row的处理逻辑,比如row.removeIf(num -> num < 0);
    arrList.add(new ArrayList<>(row));
}

二、你的对角线计算代码有几个小问题,我帮你改好

先说说你代码里的坑:

  • 拼写错误:List<List<Intger>>里的Intger应该是Integer,这个编译肯定过不了
  • 对角线判断逻辑错误:if (a[i] == a[j])是在比较数组对象,不是索引相等;而且取值应该是a[i][j],不是a[i](a[i]是整行数组,不是单个元素)
  • 嵌套循环完全没必要,一条循环就能搞定两条对角线的求和,不用遍历所有元素

修正后的完整代码(包含转换步骤)

public static int diagonalDifference(List<List<Integer>> arr) {
    // 2D List转2D ArrayList
    List<List<Integer>> arrList = new ArrayList<>(arr);
    
    // 2D ArrayList转int[][]数组
    int[][] matrix = new int[arrList.size()][];
    for (int i = 0; i < arrList.size(); i++) {
        List<Integer> row = arrList.get(i);
        // 两种转数组的方式都可以,选你习惯的
        matrix[i] = row.toArray(new int[row.size()]);
        // 或者用stream:matrix[i] = row.stream().mapToInt(Integer::intValue).toArray();
    }
    
    // 计算两条对角线的和
    int primarySum = 0;
    int secondarySum = 0;
    int n = matrix.length;
    
    for (int i = 0; i < n; i++) {
        primarySum += matrix[i][i]; // 主对角线:行号=列号
        secondarySum += matrix[i][n - i - 1]; // 副对角线:列号 = 总长度-1-行号
    }
    
    return Math.abs(primarySum - secondarySum);
}

额外偷懒技巧:其实可以跳过转换步骤

要是你只是为了计算对角线差值,根本没必要转成ArrayList或者数组,直接操作原List<List<Integer>>就行,代码更简洁:

public static int diagonalDifference(List<List<Integer>> arr) {
    int primarySum = 0;
    int secondarySum = 0;
    int n = arr.size();
    
    for (int i = 0; i < n; i++) {
        primarySum += arr.get(i).get(i);
        secondarySum += arr.get(i).get(n - i - 1);
    }
    
    return Math.abs(primarySum - secondarySum);
}

这个版本省去了两次转换的开销,运行效率更高,代码也更清爽~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:27:40