1. 概述

在编程中,我们经常会遇到需要创建多维 ArrayList 的场景。最常见的就是二维或三维的 ArrayList。本文将带你了解如何在 Java 中创建并使用这些结构。

⚠️ 注意:虽然 Java 原生支持多维数组(如 int[][]),但 ArrayList 的多维结构需要手动构建,因为 Java 并不直接支持“多维集合”。

2. 二维 ArrayList

假设我们要表示一个有 3 个顶点(编号为 0、1、2)的图,并且图中有 3 条边:(0, 1)、(1, 2) 和 (2, 0)。每条边由两个顶点组成。

✅ 我们可以使用一个 二维 ArrayList 来表示这些边,也就是一个 ArrayListArrayList

2.1 初始化二维 ArrayList

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

接着,为每个顶点初始化一个空的 ArrayList

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

2.2 添加边

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

如果图是无向图,我们还需要添加反向边:

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

2.3 遍历二维 ArrayList

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);
    }
}

输出示例:

Vertex 0 is connected to vertex 1
Vertex 0 is connected to vertex 2
Vertex 1 is connected to vertex 2
Vertex 1 is connected to vertex 0
Vertex 2 is connected to vertex 0
Vertex 2 is connected to vertex 1

3. 三维 ArrayList

在上一节中,我们构建了一个二维 ArrayList。现在我们来构建一个三维 ArrayList,用来表示一个三维空间中的点及其属性。

3.1 场景设定

假设我们要表示一个 2×2×2 的三维空间,共有 8 个点:

  • (0, 0, 0)
  • (0, 0, 1)
  • (0, 1, 0)
  • (0, 1, 1)
  • (1, 0, 0)
  • (1, 0, 1)
  • (1, 1, 0)
  • (1, 1, 1)

每个点有一个颜色属性,比如 Red、Blue、Green、Yellow。

3.2 初始化三维 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);

接着初始化每一层:

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));
    }
}

3.3 添加颜色数据

为点 (0, 0, 0) 和 (0, 0, 1) 设置红色:

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

为点 (0, 1, 0) 和 (0, 1, 1) 设置蓝色:

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

3.4 数据访问方式

某个点 (i, j, k) 的颜色可以通过如下方式访问:

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

📌 关键理解点

  • 最外层 ArrayList 表示 X 轴
  • 每个元素是一个二维 ArrayList,表示 Y-Z 平面
  • 每个 Y-Z 平面中,再通过 Z 轴索引访问具体点的颜色

4. 总结

本文介绍了如何在 Java 中构建二维和三维的 ArrayList 结构:

✅ 二维 ArrayList 是 ArrayList<ArrayList<T>>
✅ 三维 ArrayList 是 ArrayList<ArrayList<ArrayList<T>>>
✅ 以此类推,N 维 ArrayList 可以通过嵌套方式构建

虽然 Java 不原生支持多维集合,但通过组合多个 ArrayList 可以灵活地实现多维结构,适用于图结构、空间数据等场景。

📌 完整代码可参考:GitHub 示例


原始标题:Multi Dimensional ArrayList in Java