Рассмотрим случай, когда мы можем определить граф с помощью List<List<Integer>>
, где список с индексом 0 будет списком смежности вершины 0 и т. Д. Для 1,2,3 и далее.
Теперь, если я объявлю такой список смежности следующим образом,
// initialize adjacency list
List<List<Integer>> adjList = new ArrayList<List<Integer>>(n);
В этом случае, почему мне нужно инициализировать каждый список следующим образом,
// initialize vertices
for (int i = 0; i < n; i++)
adjList.add(i, new ArrayList<Integer>());
Этот цикл только добавляетновый список для каждого индекса i, где n = количество вершин в графе.
Не означает ли первоначальное объявление, что основной список будет иметь список с индексом 0, а затем снова другой список с индексом 1 ии так далее?
Я имею в виду, я могу понять использование этого цикла, если я объявляю граф с помощью массива списков следующим образом:
ArrayList[] graph = new ArrayList[n];
, то в этомв случае, да, мне определенно понадобится цикл для инициализации списка смежности каждой вершины, но зачем нам инициализировать и в этом начальном случае?
Что если я объявлю массив следующим образом? Будет ли это иметь какое-либо значение для цикла?
1. List<List<Integer>> adjList = new ArrayList<>(n);
2. List<List<Integer>> adjList = new ArrayList<List<List<Integer>>(n);
Пожалуйста, помогите мне, в чем заключается концептуальная ошибка, которую я делаю, чтобы понять это?