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

Источник: http://net-informations.com/Java/cJava/vector.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector