Перейти к основному содержимому

Многомерный ArrayList в Java

· 4 мин. чтения

Задача: Сумма двух

Дано массив целых чисел и целая сумма. Нужно найти индексы двух чисел, сумма которых равна заданной ...

ANDROMEDA

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 .