Приводилось ли аргументировать выбор структуры данных в Java на основе производительности?

«Приводилось ли аргументировать выбор структуры данных в Java на основе производительности?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Да. В одном из проектов обсуждался выбор между ArrayList и LinkedList для операций частой вставки в середину списка. Я настаивал на LinkedList, так как его операция вставки имеет сложность O(1), в то время как у ArrayListO(n) из-за необходимости сдвига элементов.

Для наглядности я подготовил простой бенчмарк:

import java.util.*;

public class ListBenchmark {
    public static void main(String[] args) {
        int iterations = 100_000;
        List<Integer> arrayList = new ArrayList<>();
        List<Integer> linkedList = new LinkedList<>();

        // Замер для ArrayList
        long start = System.nanoTime();
        for (int i = 0; i < iterations; i++) {
            arrayList.add(arrayList.size() / 2, i);
        }
        long arrayListTime = System.nanoTime() - start;

        // Замер для LinkedList
        start = System.nanoTime();
        for (int i = 0; i < iterations; i++) {
            linkedList.add(linkedList.size() / 2, i);
        }
        long linkedListTime = System.nanoTime() - start;

        System.out.println("ArrayList time: " + arrayListTime + " ns");
        System.out.println("LinkedList time: " + linkedListTime + " ns");
    }
}

Результаты явно показали преимущество LinkedList для данного сценария. Команда приняла решение на основе этих данных.