l想创建一个动态2D矩阵,其中行和列的数量未知。通过在当时添加一个元素来填充它。例如,第一个按钮click = M [1] [1](此时矩阵只包含这个元素),然后M [1] [2],[1] [3] ....等等。Java动态2D矩阵
2
A
回答
4
使用集合来完成此操作。例如:
List<List<Integer>> dynamic2D = new ArrayList<List<Integer>>();
dynamic2D.add(new ArrayList<Integer>());
dynamic2D.add(new ArrayList<Integer>());
dynamic2D.add(new ArrayList<Integer>());
dynamic2D.get(0).add(5);
dynamic2D.get(0).add(6);
dynamic2D.get(0).add(7);
System.out.println(dynamic2D.get(0).get(0)); // 5
System.out.println(dynamic2D.get(0).get(1)); // 6
System.out.println(dynamic2D.get(0).get(2)); // 7
+0
+1为简单的解决方案。 – Joel 2011-04-04 14:40:25
1
你可以(1)使用一个散列映射它映射指向按钮状态,并且具有存储在单独的变量的行和列的最大数量;或者,您可以(2)使用树并为每一行都有一个节点,并将节点添加到相应的行节点以表示矩阵条目。
你也可以(3)使用整数,其中每个整数的第一Ñ位可以存储行的有序,动态列表(数组列表,链接列表等),下一Ñ位该列以及与该按钮的状态有关的其余位的任何数据。然而,n的大小取决于行数和列数的最大范围。当您从列表中检索元素时,使用按位运算符来提取相关数据。
如果使用数组列表,则分配的内存量将最少(3),否则,由于数据结构的性质,每个条目在添加额外元素时都会有一些额外的数据。 (1)的搜索速度最快; (2)和(3)都应该显示O(log(n))的搜索时间,但是由于数据的局部性,我会怀疑(3)会快得多。在方法(1)和(2)中,添加和删除元素的速度最快(1);方法(3)添加或移除元素所用的时间取决于列表的实现。
我敢肯定有很多其他的结构可以使用,我没有在这里列出,但是您可能要注意的是,如果您可以保证行数和列数保持在合理范围内,那么使用静态数据结构可以真正加快速度。
2
这里有一个选项可以考虑保持你的2D阵列快速处理。它始于的int[][]
固定尺寸数组,并仅在必要的增长:
public class DynamicMatrix2D {
private int[][] matrix = new int[5][5];
public void set(int x, int y, int value) {
if (x >= matrix.length) {
int[][] tmp = matrix;
matrix = new int[x + 1][];
System.arraycopy(tmp, 0, matrix, 0, tmp.length);
for (int i = x; i < x + 1; i++) {
matrix[i] = new int[y];
}
}
if (y >= matrix[x].length) {
int[] tmp = matrix[x];
matrix[x] = new int[y + 1];
System.arraycopy(tmp, 0, matrix[x], 0, tmp.length);
}
matrix[x][y] = value;
}
public int get(int x, int y) {
return x >= matrix.length || y >= matrix[x].length ? 0 : matrix[x][y];
}
public static void main(String[] args) {
DynamicMatrix2D matrix2d = new DynamicMatrix2D();
matrix2d.set(1, 1, 1); // set (1, 1) to 1
matrix2d.set(10, 10, 2); // set (10, 10) to 2
matrix2d.set(100, 100, 3); // set (100, 100) to 3
System.out.println(matrix2d.get(1, 1)); // outputs 1
System.out.println(matrix2d.get(10, 10)); // outputs 2
System.out.println(matrix2d.get(100, 100)); // outputs 3
}
}
相关问题
- 1. C++矩阵动态2D arrray
- 2. Java动态矩阵
- 3. 模板C++分配动态矩阵2D
- 4. C:动态2D矩阵释放
- 5. 从2D矩阵动态填充3D矩阵
- 6. Java动态矩阵结构
- 7. 如何在java中创建动态矩阵2d?
- 8. 情节2D矩阵
- 9. QStrings的2D矩阵
- 10. 查找2D矩阵
- 11. 从数组创建2d矩阵(java)
- 12. 转换3D矩阵级联2D矩阵
- 13. 乘以3D矩阵和2D矩阵CUDA
- 14. 将2D矩阵转换为3D矩阵?
- 15. 将3d矩阵重塑为2d矩阵
- 16. 乘以2D矩阵的一维矩阵
- 17. Matlab的变换2D矩阵3D矩阵
- 18. Java:电影项目的动态矩阵
- 19. 自由矩阵动态矩阵问题
- 20. 动态创建动态2D numpy阵列
- 21. 2D矩阵的numpy的矩阵乘法,得到三维矩阵
- 22. 如何使用TFileStream将2D矩阵读入动态数组?
- 23. 用于坐标对象的2D动态JavaScript矩阵
- 24. CUDA GPU 2D矩阵访问
- 25. 蟒骨料(GROUPBY)2D矩阵
- 26. 将值赋给2D矩阵
- 27. arrayfun 2d矩阵输入
- 28. 2d矩阵的xml表示
- 29. 2d矩阵到矢量
- 30. 插入以2D矩阵
[Java中创建动态2D矩阵]的可能重复(http://stackoverflow.com/questions/5533214/creating-a- dynamic-2d-matrix-in-java) – trashgod 2011-04-04 02:04:10