【问题标题】:Data structure to store 2D-arrays in JAVA在 JAVA 中存储二维数组的数据结构
【发布时间】:2012-06-02 21:16:24
【问题描述】:

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

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

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

【问题讨论】:

  • 你可以使用 List>,或者...... int[][] 呢?
  • 您对数据结构有什么要求? 2D 数组本身就是一种数据结构,那么您希望将其包装成什么?为什么?
  • 很多数据结构都会保存二维数组,但是您有什么其他要求才是更重要的细节。

标签: java arrays multidimensional-array arraylist


【解决方案1】:

如果您需要在数据结构中存储多个 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。因此,您创建一个 Coordinates 的 List,它比 int[][][] 更有意义。

【讨论】:

  • 谢谢。我会尝试这种方式,如果不能让它工作(因为我以前从未使用过 Lists),我会尝试 int[][][],因为它更容易理解。再次感谢!
  • 试一试 - ArrayLists 非常简单 - 只需查看 Java 文档中的方法列表即可。所有数组命令都有一个等价的命令——例如,你调用list.get(0);,而不是调用array[0]。
【解决方案2】:

如果大小固定,则使用int[][],否则使用List&lt;List&lt;Integer&gt;&gt;。

【讨论】:

  • 二维数组的大小是固定的。它是 int[11][7].
  • 对不起,我错过了你需要有数组的数组。比 qou 可以使用 List 或 int[][][].
【解决方案3】:

根据您的编辑:

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

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

【讨论】:

    【解决方案4】:

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

    int[][][] arrColl
    

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

    Collection<int[][]> arrColl
    

    【讨论】:

      【解决方案5】:

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

      如果你想在数据结构中存储数据,你需要专注于数据结构的使用方式,考虑你将如何检索数据和存储数据,你多久执行一次操作,以及你将使用多少数据一起工作。然后你知道哪些方法必须是最优的,并且知道数据是否可以驻留在内存中等等。

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-12
        相关资源
        最近更新 更多