Каковы различия между ArrayList и Vector в Java?
Содержание
Java ArrayList и Vector реализуют интерфейс List и поддерживают порядок вставки. Но между ArrayList и Vector есть некоторые отличия.
Java ArrayList и Vector реализуют интерфейс List и поддерживают порядок вставки. Но между ArrayList и Vector есть некоторые отличия....
Вектор синхронизируется по умолчанию, а ArrayList - нет.
Что такое синхронизация?
Когда мы запускаем два или более потока внутри программы, может возникнуть ситуация, когда несколько потоков пытаются получить доступ к одному и тому же ресурсу, и, наконец, они могут создать непредвиденный результат из-за проблем с параллелизмом. Синхронизированное ключевое слово заставляет поток получать блокировку при вводе метода, так что только один поток может выполнить метод в одно и то же время. Обычно это называется созданием класса потокобезопасным. Без синхронизации не гарантируется, в каком порядке происходит чтение и запись, возможно, оставляя переменную с мусором.
То, что означает это (Синхронизация), состоит в том, что только один поток может вызывать методы по Vector за раз, и есть небольшие накладные расходы при приобретении блокировки. Важно отметить, что вы можете заставить ArrayList также синхронизироваться, передав объект arraylist методу Collections.synchronizedList().
Рост данных
Внутри, как ArrayList, так и Vector удерживают их содержимое с помощью массива. Оба могут расти и сжиматься динамически, чтобы поддерживать оптимальное использование хранилища, однако способ изменения размеров отличается. ArrayList создается с начальным размером по умолчанию 10. Если этот размер превышен, коллекция автоматически увеличивается до половины размера по умолчанию, равным 15. Векторные приращения 100% означают удвоение размера массива, если общее количество элементов превышает его емкость ,
Производительность
ArrayList дает лучшую производительность, так как он не синхронизирован. Операции с вектором дают низкую производительность, так как они потокобезопасны, поток, который работает на Vector, получает блокировку, которая заставляет другой поток ждать, пока блокировка не будет выпущена. Это означает, что в ArrayList два или более потока могут одновременно обращаться к коду, а Vector ограничено одним потоком за раз.
Перемещение (Итератор)
Элементы ArrayList можно перемещать с помощью Iterator, ListIterator и с использованием обычного или расширенного цикла. Vector использует интерфейс Enumeration для перемещения элементов.
Наследство
Этот вектор не был частью структуры коллекции, позже он был включен в коллекции. Его можно считать устаревшим кодом. В коллекции Vector Collection ничего не может быть. Поэтому Vector следует избегать.
Реализация ArrayList
import Java.util.*; class TestClass { public static void main (String[] args) { // создаем список массивов Object ArrayList aList = new ArrayList(); aList.add("Sunday"); // добавление элемента aList.add("Monday"); aList.add("Tuesday"); Iterator ir=aList.iterator(); while(ir.hasNext()){ System.out.println(ir.next()); } }
Выход
Sunday Monday Tuesday
Выполнение вектора
import Java.util.*; class TestClass { public static void main (String[] args) { // создаем новый векторный объект Vector vcTr = new Vector(); System.out.println("Vector Size: " + vcTr.size()); // начальный размер равен 2, приращение равно 2 vcTr = new Vector(2,2); System.out.println("Vector Size: " + vcTr.size()); vcTr.addElement("Sunday"); vcTr.addElement("Monday"); vcTr.addElement("Wednesday"); System.out.println("Vector Size: " + vcTr.size()); System.out.println("Vector Capacity: " + vcTr.capacity()); // здесь вы можете увеличить емкость в 4 раза // использование Итератора для просмотра всех элементов в векторе Iterator < String > itr = vcTr.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }
Выход
Vector Size: 0 Vector Size: 0 Vector Size: 3 Vector Capacity: 4 Sunday Monday Wednesday