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