Одна вещь, которая меня недавно интересовала, заключается в том, почему принято строить списки смежности как массив LinkedLists. LinkedLists имеют время доступа к элементу O (n), потому что вам потенциально нужно пройти по каждому элементу в списке, чтобы найти тот, который вы ищете. Почему бы не использовать что-то вроде ArrayList или HashSet с постоянным временем доступа для создания списка смежности?