在JAVA中存储二维数组的数据结构

4

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

有人可以给我一个简短的例子,说明如何创建这样的数据结构以及如何添加一个2D数组吗?

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


你可以使用List<List<Integer>>,或者... int[][]怎么样? - giorgiga
你对数据结构有什么要求?2D数组本身就是一种数据结构,那你想将其包装成什么样的形式以及为什么这样做? - Bhaskar
2
很多数据结构将会持有2D数组,但是你所拥有的其他需求才是更重要的细节。 - Zéychin
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。因此,你创建一个 ListCoordinates,它比 int[][][] 更具有意义。

谢谢。我会尝试这种方法,如果无法使其工作(因为我以前从未使用过列表),我将尝试int [] [] [],因为这对我来说更容易理解。再次感谢! - Christos Baziotis
试一试 - ArrayLists 很简单 - 只需查看 Java 文档以获取方法列表即可。所有数组命令都有相应的等效命令 - 例如,不是调用 array[0],而是调用 list.get(0); - wattostudios

2
一个数组不仅是一种存储信息的想法,也是一种存储数据的实现方式。因此,如果您使用数组,就已经选择了数据结构。
如果您想在数据结构中存储数据,需要集中精力考虑如何使用数据结构,思考如何检索数据和存储数据,每个操作的频率以及要处理多少数据。然后,您就知道哪些方法必须是最佳的,并且对于数据是否可以驻留在内存中有一个概念。
这里只是举个例子来说明可以用多种方式解决这个问题:
1. 您可以将数组展平为1D数组,并使用x*num_columns+y作为索引。 2. 您可以创建一个包含该对的对象,并将数组放入Map中。 3. 您可以使用包含链接列表的链接列表。 4. 您可以使用包含树的树。 5. 您可以使用包含树的列表。 6. 您可以创建一部分顺序来覆盖该对,然后将所有元素放入一棵树中。
所有这些解决方案都严重依赖于要优化哪些操作。有时快速更新数据结构更为重要,有时则不是。决定因素实际上是程序的其余部分。

1

所以您想要存储一组2D数组:如果该集合是固定大小,请添加另一个维度:

int[][][] arrColl

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

Collection<int[][]> arrColl

0
如果大小固定,则使用 int[][],否则使用 List<List<Integer>>

2D数组的大小是固定的。它是int[11][7]。 - Christos Baziotis
抱歉,我错过了您需要具有数组的数组。那么您可以使用List<int[][]>或int[][][]。 - dbf

0

根据您的编辑:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接