1. Обзор
Создание многомерного ArrayList
часто возникает во время программирования. Во многих случаях необходимо создать двумерный ArrayList
или трехмерный ArrayList
.
В этом руководстве мы обсудим, как создать многомерный ArrayList
в Java.
2. Двумерный список массивов
Предположим, мы хотим представить граф с 3 вершинами, пронумерованными от 0 до 2. Кроме того, предположим, что в графе есть 3 ребра (0, 1), (1, 2) и (2, 0), где пара вершин представляет ребро.
Мы можем представить ребра в 2-D ArrayList
, создав и заполнив ArrayList
из ArrayList
s.
Во-первых, давайте создадим новый 2-D ArrayList
:
int vertexCount = 3;
ArrayList<ArrayList<Integer>> graph = new ArrayList<>(vertexCount);
Далее мы инициализируем каждый элемент ArrayList
другим ArrayList
:
for(int i=0; i < vertexCount; i++) {
graph.add(new ArrayList());
}
Наконец, мы можем добавить все ребра (0, 1), (1, 2) и (2, 0) в наш 2-D ArrayList
:
graph.get(0).add(1);
graph.get(1).add(2);
graph.get(2).add(0);
Предположим также, что наш граф не является ориентированным графом. Итак, нам также нужно добавить ребра (1, 0), (2, 1) и (0, 2) в наш 2-D ArrayList
:
graph.get(1).add(0);
graph.get(2).add(1);
graph.get(0).add(2);
Затем, чтобы перебрать весь граф, мы можем использовать двойной цикл 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. Трехмерный список массивов
В предыдущем разделе мы создали двумерный список ArrayList.
Следуя той же логике, создадим трехмерный ArrayList
:
Предположим, что мы хотим представить трехмерное пространство. Таким образом, каждая точка в этом трехмерном пространстве будет представлена тремя координатами, скажем, X, Y и Z.
В дополнение к этому давайте представим, что каждая из этих точек будет иметь цвет: красный, зеленый, синий или желтый. Теперь каждую точку (X, Y, Z) и ее цвет можно представить трехмерным списком ArrayList.
Для простоты предположим, что мы создаем трехмерное пространство (2 x 2 x 2). В нем будет восемь точек: (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0 , 1), (1, 1, 0) и (1, 1, 1).
Давайте сначала инициализируем переменные и 3-D 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);
Затем давайте инициализируем каждый элемент ArrayList
с помощью ArrayList<ArrayList<String>>
:
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));
}
}
Теперь мы можем добавлять цвета к точкам в пространстве. Добавим красный цвет для точек (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");
Точно так же мы можем продолжать заполнять точки в пространстве другими цветами.
Обратите внимание, что информация о цвете точки с координатами (i, j, k) хранится в следующем элементе 3-D ArrayList :
space.get(i).get(j).get(k)
Как мы видели в этом примере, переменная space — это
ArrayList
. Кроме того, каждый элемент этого ArrayList
является двумерным ArrayList
(аналогично тому, что мы видели в разделе 2).
Обратите внимание, что индекс элементов в нашем пространстве
ArrayList
представляет координату X, в то время как каждый 2-D ArrayList
, присутствующий в этом индексе, представляет координаты (Y, Z).
4. Вывод
В этой статье мы обсудили, как создать многомерный ArrayList
в Java. Мы увидели, как можно представить граф с помощью 2-D ArrayList
. Кроме того, мы также изучили, как представлять трехмерные пространственные координаты с помощью трехмерного списка ArrayList
.
В первый раз мы использовали ArrayList
из ArrayList,
а во второй раз мы использовали ArrayList
из 2-D ArrayList
. Точно так же, чтобы создать N-мерный список ArrayList,
мы можем расширить ту же концепцию.
Полную реализацию этого туториала можно найти на GitHub .