Рубрики

Вектор против ArrayList в Java

ArrayList и Vectors реализуют интерфейс List и оба используют (динамически изменяемые размеры) массивы для своей внутренней структуры данных, так же, как при использовании обычного массива.
Синтаксис:

   
   ArrayList<T> al = new ArrayList<T>();
   Vector<T> v = new Vector<T>(); 

Основные различия между ArrayList и Vector:

  1. Синхронизация: Vector синхронизируется , что означает, что только один поток за раз может получить доступ к коду, в то время как arrayList не синхронизирован , что означает, что несколько потоков могут работать с arrayList одновременно. Например, если один поток выполняет операцию добавления, тогда может быть другой поток, выполняющий операцию удаления в многопоточной среде.
    Если несколько потоков обращаются к arrayList одновременно, тогда мы должны синхронизировать блок кода, который структурно изменяет список, или альтернативно разрешать простые модификации элемента. Структурная модификация означает добавление или удаление элемента (ов) из списка. Установка значения существующего элемента не является структурной модификацией.
  2. Производительность: ArrayList работает быстрее , поскольку он не синхронизирован, тогда как векторные операции дают более низкую производительность, поскольку они синхронизированы (поточно-ориентированы). Если один поток работает с вектором, он получает блокировку для него, что заставляет любой другой поток, желающий работать с ним, ждать, пока блокировка не будет снята.
  3. Увеличение объема данных: ArrayList и Vector динамически растут и сжимаются для обеспечения оптимального использования хранилища, но способ их изменения — разный. ArrayList увеличивает на 50% текущий размер массива, если количество элементов превышает его емкость, а вектор увеличивает на 100%, что существенно удваивает текущий размер массива.
  4. Обход: Vector может использовать и Enumeration, и Iterator для обхода элементов вектора, в то время как ArrayList может использовать Iterator только для обхода.

Примечание: ArrayList предпочтительнее, когда нет особых требований использовать вектор.

// Java-программа для иллюстрации использования ArrayList
// и вектор в Java

import java.io.*;

import java.util.*;

  

class GFG

{

    public static void main (String[] args)

    {

        // создаем ArrayList

        ArrayList<String> al = new ArrayList<String>();

  

        // добавление объекта в массив

        al.add("Practice.GeeksforGeeks.org");

        al.add("quiz.GeeksforGeeks.org");

        al.add("code.GeeksforGeeks.org");

        al.add("contribute.GeeksforGeeks.org");

  

        // обход элементов с помощью Iterator '

        System.out.println("ArrayList elements are:");

        Iterator it = al.iterator();

        while (it.hasNext())

            System.out.println(it.next());

  

        // создаем вектор

        Vector<String> v = new Vector<String>();

        v.addElement("Practice");

        v.addElement("quiz");

        v.addElement("code");

  

        // обход элементов с помощью перечисления

        System.out.println("\nVector elements are:");

        Enumeration e = v.elements();

        while (e.hasMoreElements())

            System.out.println(e.nextElement());

    }

}

Выход:

ArrayList elements are:
Practice.GeeksforGeeks.org
quiz.GeeksforGeeks.org
code.GeeksforGeeks.org
contribute.GeeksforGeeks.org

Vector elements are:
Practice
quiz
code

Как выбрать между ArrayList и Vector?

  • ArrayList не синхронизирован и не ориентирован на многопотоковое исполнение, тогда как Векторы. Только один поток может вызывать методы для вектора за раз, что является небольшим расходом, но полезно, когда безопасность является проблемой. Следовательно, в однопоточном случае, arrayList является очевидным выбором, но в случае многопоточности векторы предпочтительнее.
  • Если мы не знаем, сколько данных мы собираемся иметь, но знаем скорость, с которой они растут, у Vector есть преимущество, поскольку мы можем установить значение приращения в векторах.
  • ArrayList новее и быстрее. Если у нас нет явных требований для использования любого из них, мы используем ArrayList поверх вектора.

Эта статья предоставлена Nitsdheerendra . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Вектор против ArrayList в Java

0.00 (0%) 0 votes