如何在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
相关产品推荐
相关产品推荐

