Multi Dimensional ArrayList in Java – Java中的多维数组列表

最后修改: 2019年 1月 4日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

Creating a multidimensional ArrayList often comes up during programming. In many cases, there is a need to create a two-dimensional ArrayList or a three-dimensional ArrayList.

在编程过程中,创建多维ArrayList经常会出现。在许多情况下,需要创建一个二维的ArrayList或三维的ArrayList

In this tutorial, we’ll discuss how to create a multidimensional ArrayList in Java.

在本教程中,我们将讨论如何在Java中创建一个多维的ArrayList

2. Two-Dimensional ArrayList

2.二维的ArrayList

Suppose we want to represent a graph with 3 vertices, numbered 0 to 2. In addition, let’s assume there are 3 edges in the graph (0, 1), (1, 2), and (2, 0), where a pair of vertices represents an edge.

假设我们想表示一个,有3个顶点,编号为0到2。此外,我们假设图中有3条边(0,1)、(1,2)和(2,0),其中一对顶点代表一条边。

We can represent the edges in a 2-D ArrayList by creating and populating an ArrayList of ArrayLists.

我们可以通过创建和填充一个ArrayListArrayList来表示二维ArrayList的边缘。

First, let’s create a new 2-D ArrayList:

首先,让我们创建一个新的二维ArrayList

int vertexCount = 3;
ArrayList<ArrayList<Integer>> graph = new ArrayList<>(vertexCount);

Next, we’ll initialize each element of ArrayList with another ArrayList:

接下来,我们将用另一个ArrayList来初始化ArrayList的每个元素。

for(int i=0; i < vertexCount; i++) {
    graph.add(new ArrayList());
}

Finally, we can add all the edges (0, 1), (1, 2), and (2, 0), to our 2-D ArrayList:

最后,我们可以将所有的边(0,1)、(1,2)和(2,0),添加到我们的二维ArrayList

graph.get(0).add(1);
graph.get(1).add(2);
graph.get(2).add(0);

Let us also assume that our graph is not a directed graph. So, we also need to add the edges (1, 0), (2, 1), and (0, 2), to our 2-D ArrayList:

我们还假设,我们的图不是一个有向图。因此,我们还需要将边(1,0)、(2,1)和(0,2),添加到我们的二维ArrayList

graph.get(1).add(0);
graph.get(2).add(1);
graph.get(0).add(2);

Then, to loop through the entire graph, we can use a double for loop:

然后,为了循环浏览整个图形,我们可以使用一个双for循环。

int vertexCount = graph.size();
for (int i = 0; i < vertexCount; i++) {
    int edgeCount = graph.get(i).size();
    for (int j = 0; j < edgeCount; j++) {
        Integer startVertex = i;
        Integer endVertex = graph.get(i).get(j);
        System.out.printf("Vertex %d is connected to vertex %d%n", startVertex, endVertex);
    }
}

3. Three-Dimensional ArrayList

3.三维ArrayList

In the previous section, we created a two-dimensional ArrayList. Following the same logic, let’s create a three-dimensional ArrayList:

在上一节中,我们创建了一个二维的ArrayList。按照同样的逻辑,让我们创建一个三维的ArrayList

Let’s assume that we want to represent a 3-D space. So, each point in this 3-D space will be represented by three coordinates, say, X, Y, and Z.

让我们假设我们想表示一个三维空间。因此,这个三维空间中的每个点将由三个坐标来表示,比如说,X、Y和Z。

In addition to that, let’s imagine each of those points will have a color, either Red, Green, Blue, or Yellow. Now, each point (X, Y, Z) and its color can be represented by a three-dimensional ArrayList.

除此之外,让我们想象一下,这些点中的每一个都会有一个颜色,要么是红色、绿色、蓝色,要么是黄色。现在,每个点(X、Y、Z)和它的颜色可以用一个三维的ArrayList.来表示。

For simplicity, let’s assume that we are creating a (2 x 2 x 2) 3-D space. It will have eight points: (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), and (1, 1, 1).

为了简单起见,让我们假设我们正在创建一个(2 x 2 x 2)三维空间。它将有八个点:(0,0,0),(0,0,1),(0,1,0),(1,0,0),(1,0,1),(1,1,0),和(1,1,1)。

Let’s first initialize the variables and the 3-D ArrayList:

让我们首先初始化变量和三维ArrayList

int x_axis_length = 2;
int y_axis_length = 2;
int z_axis_length = 2;	
ArrayList<ArrayList<ArrayList<String>>> space = new ArrayList<>(x_axis_length);

Then, let’s initialize each element of ArrayList with ArrayList<ArrayList<String>>:

然后,让我们用ArrayList<ArrayList<String>>来初始化ArrayList的每个元素。

for (int i = 0; i < x_axis_length; i++) {
    space.add(new ArrayList<ArrayList<String>>(y_axis_length));
    for (int j = 0; j < y_axis_length; j++) {
        space.get(i).add(new ArrayList<String>(z_axis_length));
    }
}

Now, we can add colors to points in space. Let’s add Red color for points (0, 0, 0) and (0, 0, 1):

现在,我们可以为空间中的点添加颜色。让我们为点(0, 0, 0)和(0, 0, 1)添加红色。

space.get(0).get(0).add(0,"Red");
space.get(0).get(0).add(1,"Red");

Then, let’s set Blue color for points (0, 1, 0) and (0, 1, 1):

然后,让我们为点(0,1,0)和(0,1,1)设置蓝色。

space.get(0).get(1).add(0,"Blue");
space.get(0).get(1).add(1,"Blue");

And similarly, we can continue to populate points in the space for other colors.

而类似地,我们可以继续在空间中为其他颜色填充点。

Note that a point with coordinates (i, j, k), has its color information stored in the following 3-D ArrayList element:

请注意,一个坐标为(i, j, k)的点,其颜色信息存储在以下三维ArrayList元素中。

space.get(i).get(j).get(k)

As we have seen in this example, the space variable is an ArrayList. Also, each element of this ArrayList is a 2-D ArrayList (similar to what we saw in section 2).

正如我们在这个例子中所看到的,space变量是一个ArrayList同时,这个ArrayList的每个元素都是一个2-D的ArrayList(与我们在第2节看到的类似。)

Note that the index of elements in our space ArrayList represents the X coordinate, while each 2-D ArrayList, present at that index, represents the (Y, Z) coordinates.

注意,在我们的空间数组List中元素的索引代表X坐标,而存在于该索引的每个二维数组List代表(Y,Z)坐标。

4. Conclusion

4.总结

In this article, we discussed how to create a multidimensional ArrayList in Java. We saw how we can represent a graph using a 2-D ArrayList. Moreover, we also explored how to represent 3-D space coordinates using a 3-D ArrayList.

在这篇文章中,我们讨论了如何在Java中创建一个多维的ArrayList。我们看到了如何使用2-D ArrayList来表示一个图形。此外,我们还探讨了如何使用3-D ArrayList来表示3-D空间坐标。

The first time, we used an ArrayList of ArrayList, while the second time, we used an ArrayList of 2-D ArrayList. Similarly, to create an N-Dimensional ArrayList, we can extend the same concept.

第一次,我们使用了ArrayListArrayList,而第二次,我们使用了ArrayList的2-DArrayList。同样地,为了创建一个N维的ArrayList,我们可以扩展同样的概念。

The full implementation of this tutorial can be found on GitHub.

本教程的完整实现可以在GitHub上找到