Sobes.tech
Junior — Middle
104

Чӣ гуна метавон самаранокии вақти амалҳоро байни ArrayList ва LinkedList муқоиса кард?

Ширкатҳо дар куҷо пурсиданд
ЛанитЛанит

Ҷавоб аз AI

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.