Назад к вопросам
Ланит
Junior — Middle
63
Как сравнить эффективность по времени операций между ArrayList и LinkedList?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для сравнения эффективности операций по времени между ArrayList и LinkedList в Java нужно учитывать особенности их реализации:
- ArrayList основан на массиве, обеспечивает быстрый доступ по индексу (O(1)), но вставка или удаление элементов в середине списка требует сдвига элементов (O(n)).
- LinkedList реализован как двусвязный список, доступ по индексу медленнее (O(n)), но вставка и удаление элементов в середине списка выполняется быстрее (O(1)), если известна позиция узла.
Чтобы сравнить эффективность, можно измерить время выполнения операций, например, вставки, удаления и доступа:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListPerformanceTest {
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();
// Заполнение списков
for (int i = 0; i < 100000; i++) {
arrayList.add(i);
linkedList.add(i);
}
// Измерение времени доступа по индексу
long start = System.nanoTime();
for (int i = 0; i < 10000; i++) {
arrayList.get(i);
}
long end = System.nanoTime();
System.out.println("ArrayList get: " + (end - start) + " ns");
start = System.nanoTime();
for (int i = 0; i < 10000; i++) {
linkedList.get(i);
}
end = System.nanoTime();
System.out.println("LinkedList get: " + (end - start) + " ns");
// Измерение времени вставки в начало
start = System.nanoTime();
for (int i = 0; i < 10000; i++) {
arrayList.add(0, i);
}
end = System.nanoTime();
System.out.println("ArrayList add at start: " + (end - start) + " ns");
start = System.nanoTime();
for (int i = 0; i < 10000; i++) {
linkedList.add(0, i);
}
end = System.nanoTime();
System.out.println("LinkedList add at start: " + (end - start) + " ns");
}
}
В итоге:
- Для частого доступа по индексу лучше использовать
ArrayList. - Для частых вставок и удалений в середине или начале списка лучше подходит
LinkedList.