Ответ
Да. В одном из проектов обсуждался выбор между ArrayList и LinkedList для операций частой вставки в середину списка. Я настаивал на LinkedList, так как его операция вставки имеет сложность O(1), в то время как у ArrayList — O(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 для данного сценария. Команда приняла решение на основе этих данных.