Каковы различия между 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
