Java 实现动态行和列的矩阵:三种方法比较
Java 实现动态行和列的矩阵有以下三种常见的方法:
- 使用二维数组实现动态行和列 通过定义一个二维数组来表示矩阵,可以动态地增加和删除行和列。例如,要增加一行,可以使用如下代码:
int[][] matrix = new int[3][4]; // 原矩阵,3行4列
int[][] newMatrix = new int[4][4]; // 新矩阵,4行4列
System.arraycopy(matrix, 0, newMatrix, 0, matrix.length); // 复制原矩阵的前3行到新矩阵
matrix = newMatrix; // 将新矩阵赋值给原矩阵
同理,要增加一列,可以使用如下代码:
int[][] matrix = new int[3][4]; // 原矩阵,3行4列
int[][] newMatrix = new int[3][5]; // 新矩阵,3行5列
for (int i = 0; i < matrix.length; i++) {
System.arraycopy(matrix[i], 0, newMatrix[i], 0, matrix[i].length); // 复制原矩阵的每一行到新矩阵
}
matrix = newMatrix; // 将新矩阵赋值给原矩阵
- 使用 List<List
> 实现动态行和列 通过定义一个 List<List> 来表示矩阵,可以动态地增加和删除行和列。例如,要增加一行,可以使用如下代码:
List<List<Integer>> matrix = new ArrayList<>();
matrix.add(Arrays.asList(1, 2, 3, 4)); // 第1行
matrix.add(Arrays.asList(5, 6, 7, 8)); // 第2行
matrix.add(Arrays.asList(9, 10, 11, 12)); // 第3行
List<Integer> newRow = new ArrayList<>(Arrays.asList(13, 14, 15, 16)); // 新行
matrix.add(newRow); // 将新行添加到矩阵末尾
同理,要增加一列,可以使用如下代码:
List<List<Integer>> matrix = new ArrayList<>();
matrix.add(Arrays.asList(1, 2, 3, 4)); // 第1行
matrix.add(Arrays.asList(5, 6, 7, 8)); // 第2行
matrix.add(Arrays.asList(9, 10, 11, 12)); // 第3行
for (int i = 0; i < matrix.size(); i++) {
List<Integer> row = matrix.get(i);
row.add(4, i * 4 + 17); // 在每一行的第4个位置插入新元素
}
- 使用 Map<Integer, Map<Integer, Integer>> 实现动态行和列 通过定义一个 Map<Integer, Map<Integer, Integer>> 来表示矩阵,可以动态地增加和删除行和列。例如,要增加一行,可以使用如下代码:
Map<Integer, Map<Integer, Integer>> matrix = new HashMap<>();
matrix.put(0, new HashMap<Integer, Integer>() { {
put(0, 1);
put(1, 2);
put(2, 3);
put(3, 4);
}}); // 第1行
matrix.put(1, new HashMap<Integer, Integer>() { {
put(0, 5);
put(1, 6);
put(2, 7);
put(3, 8);
}}); // 第2行
matrix.put(2, new HashMap<Integer, Integer>() { {
put(0, 9);
put(1, 10);
put(2, 11);
put(3, 12);
}}); // 第3行
Map<Integer, Integer> newRow = new HashMap<Integer, Integer>() { {
put(0, 13);
put(1, 14);
put(2, 15);
put(3, 16);
}}; // 新行
matrix.put(matrix.size(), newRow); // 将新行添加到矩阵末尾
同理,要增加一列,可以使用如下代码:
Map<Integer, Map<Integer, Integer>> matrix = new HashMap<>();
matrix.put(0, new HashMap<Integer, Integer>() { {
put(0, 1);
put(1, 2);
put(2, 3);
put(3, 4);
}}); // 第1行
matrix.put(1, new HashMap<Integer, Integer>() { {
put(0, 5);
put(1, 6);
put(2, 7);
put(3, 8);
}}); // 第2行
matrix.put(2, new HashMap<Integer, Integer>() { {
put(0, 9);
put(1, 10);
put(2, 11);
put(3, 12);
}}); // 第3行
for (int i = 0; i < matrix.size(); i++) {
Map<Integer, Integer> row = matrix.get(i);
row.put(row.size(), i * 4 + 17); // 在每一行的末尾插入新元素
}
三种方法的比较:
- 二维数组实现简单,但需要预先分配内存,无法动态调整大小,且访问元素效率较高。
- List<List
> 实现灵活,可动态调整大小,但访问元素效率较低。 - Map<Integer, Map<Integer, Integer>> 实现灵活,可动态调整大小,但代码较为复杂,访问元素效率较低。
选择哪种方法取决于具体的需求。如果需要频繁访问元素,则建议使用二维数组。如果需要动态调整大小,则建议使用 List<List
原文地址: https://www.cveoy.top/t/topic/n8wQ 著作权归作者所有。请勿转载和采集!