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

如何在ArrayList<ArrayList<Integer>>中交换指定元素?

在ArrayList<ArrayList>中跨子列表交换元素的实现方案

Java 中的 ArrayList 并没有提供直接支持跨嵌套子列表交换元素的内置方法——因为你要交换的是两个不同子列表中的元素(mat.get(i).get(j) 属于第i个子列表,mat.get(j).get(i+1) 属于第j个子列表),必须手动完成交换逻辑。

手动交换的实现步骤

核心思路是分别定位两个元素所在的子列表,通过 get 获取元素值,再用 set 方法替换对应位置的值,同时要先做好索引合法性检查避免越界异常:

  • 验证所有索引的有效性:确保 i、j 在父列表的范围内,且 j 是第i个子列表的合法索引,i+1 是第j个子列表的合法索引。
  • 获取两个子列表的引用和对应位置的元素值。
  • 交换两个位置的元素值。

代码示例

import java.util.ArrayList;

public class MatrixSwap {
    public static void swapCrossElements(ArrayList<ArrayList<Integer>> mat, int i, int j) {
        // 索引合法性校验
        if (i < 0 || i >= mat.size()) {
            throw new IndexOutOfBoundsException("索引 i 超出范围: " + i);
        }
        if (j < 0 || j >= mat.size()) {
            throw new IndexOutOfBoundsException("索引 j 超出范围: " + j);
        }
        
        ArrayList<Integer> rowI = mat.get(i);
        if (j >= rowI.size()) {
            throw new IndexOutOfBoundsException("索引 j 在第 " + i + " 行中超出范围");
        }
        
        ArrayList<Integer> rowJ = mat.get(j);
        if (i + 1 >= rowJ.size()) {
            throw new IndexOutOfBoundsException("索引 i+1 在第 " + j + " 行中超出范围");
        }
        
        // 执行交换
        int temp = rowI.get(j);
        rowI.set(j, rowJ.get(i + 1));
        rowJ.set(i + 1, temp);
    }
}

关于内置方法的说明

Java 集合框架中的 Collections.swap() 只能用于同一个列表内的元素交换(比如交换同一个子列表里的两个元素),语法为 Collections.swap(list, index1, index2),无法直接处理你这种跨嵌套子列表的交换场景,因此必须手动实现上述逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:30:53