Назад к вопросам
Middle
70
questionbank

Почему был добавлен ArrayList, если ранее уже существовал Vector?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Добавление ArrayList после Vector было обусловлено необходимостью в неограниченно расширяемом массиве, оптимизированном для работы в однопоточном окружении. Vector является синхронизированным, что приводит к накладным расходам на блокировки даже в случаях, когда многопоточный доступ отсутствует.

Основные отличия:

Характеристика Vector ArrayList
Синхронизация Синхронизированный (потокобезопасный). Не синхронизированный (не потокобезопасный).
Производительность Ниже из-за накладных расходов на синхронизацию. Выше в однопоточных сценариях.
Изменение размера Размер удваивается. Размер увеличивается на 50%.
Наследует AbstractList, RandomAccess, Cloneable, Serializable. AbstractList, RandomAccess, Cloneable, Serializable.

Пример использования ArrayList для лучшей производительности в однопоточной среде:

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

    public static void main(String[] args) {
        List<String> names = new ArrayList<>(); // Использование ArrayList
        names.add("Alice");
        names.add("Bob");

        for (String name : names) {
            System.out.println(name);
        }
    }
}

В многопоточных сценариях предпочтительнее использовать синхронизированный Vector или обернуть ArrayList в синхронизированную оболочку с помощью Collections.synchronizedList().

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SynchronizedListExample {

    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        List<String> synchronizedNames = Collections.synchronizedList(names); // Обертывание ArrayList

        // Теперь synchronizedNames потокобезопасен
        synchronizedNames.add("Charlie");
    }
}

Таким образом, ArrayList был добавлен для предоставления более производительного аналога Vector для использования в однопоточных программах, где накладные расходы на синхронизацию не требуются.