用于在JAVA中存储2D数组的数据结构

时间:2012-05-28 13:51:20

标签: java arrays multidimensional-array arraylist

我正在寻找一种存储二维整数数组的数据结构。 列出了rigth数据结构还是应该使用另一个?

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

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

5 个答案:

答案 0 :(得分: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。因此,您创建List Coordinates,其含义远远超过int[][][]

答案 1 :(得分:2)

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

如果要将数据存储在数据结构中,则需要专注于数据结构的使用方式,考虑如何检索数据和存储数据,每次操作的频率以及数据量正在与...合作。然后你知道哪些方法必须是最优的,并且知道数据是否可以驻留在内存中等等。

只是举例说明可以解决的方法有多少:

  1. 您可以将数组展平为一维数组,并使用x * num_columns + y作为索引
  2. 您可以创建一个Object来包含该对,并将该数组放入Map
  3. 您可以使用包含链接列表的链接列表。
  4. 您可以使用包含树木的树。
  5. 您可以使用包含树的列表。
  6. 您可以在对上创建部分顺序,然后将所有元素放入一个树中。
  7. 所有这些解决方案在很大程度上取决于哪些操作对于优化更为重要。有时候快速更新数据结构更重要,有时则不然。决定因素实际上是你的其他计划。

答案 2 :(得分:1)

因此,您希望存储一组2D数组:如果该集合是固定大小,则添加另一个维度:

int[][][] arrColl

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

Collection<int[][]> arrColl

答案 3 :(得分:0)

如果尺寸已修复,请使用int[][]其他List<List<Integer>>

答案 4 :(得分:0)

根据您的修改:

您需要

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

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