Я знаю, что массивы быстрее получают и настраивают, в то время как LinkedLists лучше при добавлении и удалении элементов, но как насчет итерации? Более «традиционный» for(i=0;i<intList.size();i++) определенно сделал бы LinkedLists медленнее, так как вам каждый раз приходилось бы получать элемент с индексом i. Но что, если я использую for(int i : intList)? Как это работает под капотом для этого экземпляра? Например:
LinkedList<Integer> intList = new LinkedList();
/*
populate list...
*/
for (int i : intList) {
//do stuff
}
Я полагаю, что нет необходимости получать конкретный элемент при просмотре всего списка, поэтому должна быть возможность иметь какую-то реализацию цикла, где производительность примерно такая же. Хотя я не знаю, как именно реализован for для этого примера, поэтому я не могу быть уверен, что это так.
На практике Arraylist будет работать быстрее практически во всех отношениях, за исключением добавления / удаления элементов в начале или середине большого списка.
как насчет исходного кода этих классов, который четко отвечает на этот вопрос, вы не поняли?
Точный дубликат - Когда использовать LinkedList вместо ArrayList?
асимптотика такие же. Постоянные факторы, вероятно, в значительной степени благоприятствуют ArrayList.




Оба они выполняют итерацию с одинаковой скоростью, O (1) при использовании foreach. Для получения дополнительной информации прочтите эта почта.
Для итерации они оба равны O (1). Если вы хотите получить доступ к случайному индексу, то LinkedList - это O (n), а
ArrayList- O (1).