4

我正在寻找一种数据结构来存储二维整数数组。List 是正确的数据结构还是应该使用另一种?

有人可以给我一个关于如何创建这样的数据结构以及如何添加二维数组的简短示例吗?

编辑:我想要一个数据结构,我想在其中存储 int[11][7] 数组。例如十个 int[11][7] 数组。

4

5 回答 5

3

如果您需要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. 因此,您创建一个Listof Coordinates,它比 . 具有更多的意义int[][][]

于 2012-05-28T13:55:28.217 回答
2

数组不仅仅是关于如何存储信息的想法,它也是如何存储数据的实现。因此,如果您使用数组,则您已经选择了数据结构。

如果要在数据结构中存储数据,则需要专注于数据结构的使用方式,考虑如何检索数据和存储数据,执行每个操作的频率以及将处理多少数据. 然后您知道哪些方法必须是最佳的,并且了解数据是否可以驻留在内存中等。

只是给你一个例子来说明有多少种方法可以解决这个问题:

  1. 您可以将数组展平为一维数组,并使用 x*num_columns+y 作为索引
  2. 您可以创建一个 Object 来包含该对,并将数组放入 Map
  3. 您可以使用包含链表的链表。
  4. 您可以使用包含树木的树。
  5. 您可以使用包含树的列表。
  6. 您可以在该对上创建一个偏序,然后将所有元素放入一棵树中。

所有这些解决方案在很大程度上取决于哪些操作对优化更重要。有时快速更新数据结构更重要,有时则不然。决定因素实际上是程序的其余部分。

于 2012-05-28T14:02:30.370 回答
1

所以你想存储一个二维数组的集合:如果集合是固定大小的,则添加另一个维度:

int[][][] arrColl

如果集合的大小可变,请使用您最喜欢的Collection<int[][]>(ArrayList、LinkedList 等)实现:

Collection<int[][]> arrColl
于 2012-05-28T14:03:39.957 回答
0

如果大小是固定的,则使用int[][]else List<List<Integer>>

于 2012-05-28T13:54:51.553 回答
0

根据您的编辑:

List<Integer[][]>是您所需要的 - 这将允许您添加任意数量的二维Integer数组。请注意,这将涉及装箱和拆箱——如果可能的话,应该避免这种情况。

如果足够(如果您提前知道需要多少个 2D int 数组),您甚至可以使用int[][][]- 一个 3D 整数数组 - 这不涉及装箱/拆箱。

于 2012-05-28T14:07:28.253 回答