← Назад к вопросам

Какой List лучше использовать при частом получении объектов по индексу?

1.2 Junior🔥 121 комментариев
#Коллекции

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Выбор List при частом получении по индексу

Для частого получения объектов по индексу лучше использовать ArrayList, так как он предоставляет O(1) доступ по индексу благодаря хранению элементов в массиве.

Сравнение List реализаций

ArrayList — лучший выбор для вашей задачи:

List<String> list = new ArrayList<>();
list.add("first");
list.add("second");
String element = list.get(0); // O(1) — очень быстро

Преимущества ArrayList:

  • Доступ по индексу — O(1) константное время
  • Хороший выбор для чтения данных
  • Минимальные затраты памяти

LinkedList — избегайте:

LinkedList<String> list = new LinkedList<>();
list.add("first");
list.add("second");
String element = list.get(0); // O(n) — медленно при больших списках

Почему LinkedList медленнее:

  • Доступ по индексу требует обхода цепочки узлов
  • При индексе 1000 нужно пройти 1000 шагов
  • LinkedList эффективен для вставки/удаления в начале

Практический пример

public class ListPerformanceExample {
    public static void main(String[] args) {
        List<Integer> arrayList = new ArrayList<>();
        List<Integer> linkedList = new LinkedList<>();
        
        // Заполнение
        for (int i = 0; i < 10000; i++) {
            arrayList.add(i);
            linkedList.add(i);
        }
        
        // Доступ по индексу
        long startArray = System.nanoTime();
        for (int i = 0; i < 1000; i++) {
            arrayList.get(i);
        }
        long timeArray = System.nanoTime() - startArray;
        
        long startLinked = System.nanoTime();
        for (int i = 0; i < 1000; i++) {
            linkedList.get(i);
        }
        long timeLinked = System.nanoTime() - startLinked;
        
        System.out.println("ArrayList: " + timeArray + " ns");
        System.out.println("LinkedList: " + timeLinked + " ns");
        // ArrayList заметно быстрее
    }
}

Вывод

Для частого получения по индексу — всегда используйте ArrayList. Это стандартная рекомендация в Java, так как большинство операций с List подразумевают именно этот паттерн использования.

Какой List лучше использовать при частом получении объектов по индексу? | PrepBro