我正在寻找一种数据结构来存储二维整数数组。List 是正确的数据结构还是应该使用另一种?
有人可以给我一个关于如何创建这样的数据结构以及如何添加二维数组的简短示例吗?
编辑:我想要一个数据结构,我想在其中存储 int[11][7] 数组。例如十个 int[11][7] 数组。
我正在寻找一种数据结构来存储二维整数数组。List 是正确的数据结构还是应该使用另一种?
有人可以给我一个关于如何创建这样的数据结构以及如何添加二维数组的简短示例吗?
编辑:我想要一个数据结构,我想在其中存储 int[11][7] 数组。例如十个 int[11][7] 数组。
如果您需要int[][]
在数据结构中存储多个数组,我可能会建议您将int[][]
数组存储在一个Object
表示数据包含的内容中,然后将它们存储Objects
在一个ArrayList
.
例如,这是一个简单的数组Object
包装器int[][]
public class 2DArray {
int[][] array;
public 2DArray(int[][] initialArray){
array = initialArray;
}
}
以下是您将如何使用它们并将它们存储在ArrayList
// create the list
ArrayList<2DArray> myList = new ArrayList<2DArray>();
// add the 2D arrays to the list
myList.add(new 2DArray(myArray1));
myList.add(new 2DArray(myArray2));
myList.add(new 2DArray(myArray3));
我建议的原因是您的int[][]
数组必须对您有意义。通过将其存储在Object
包装类中,您可以赋予它含义。例如,如果值是坐标,您将调用您的类Coordinates
而不是2DArray
. 因此,您创建一个List
of Coordinates
,它比 . 具有更多的意义int[][][]
。
数组不仅仅是关于如何存储信息的想法,它也是如何存储数据的实现。因此,如果您使用数组,则您已经选择了数据结构。
如果要在数据结构中存储数据,则需要专注于数据结构的使用方式,考虑如何检索数据和存储数据,执行每个操作的频率以及将处理多少数据. 然后您知道哪些方法必须是最佳的,并且了解数据是否可以驻留在内存中等。
只是给你一个例子来说明有多少种方法可以解决这个问题:
所有这些解决方案在很大程度上取决于哪些操作对优化更重要。有时快速更新数据结构更重要,有时则不然。决定因素实际上是程序的其余部分。
所以你想存储一个二维数组的集合:如果集合是固定大小的,则添加另一个维度:
int[][][] arrColl
如果集合的大小可变,请使用您最喜欢的Collection<int[][]>
(ArrayList、LinkedList 等)实现:
Collection<int[][]> arrColl
如果大小是固定的,则使用int[][]
else List<List<Integer>>
。
根据您的编辑:
List<Integer[][]>
是您所需要的 - 这将允许您添加任意数量的二维Integer
数组。请注意,这将涉及装箱和拆箱——如果可能的话,应该避免这种情况。
如果足够(如果您提前知道需要多少个 2D int 数组),您甚至可以使用int[][][]
- 一个 3D 整数数组 - 这不涉及装箱/拆箱。