Difference between ArrayList and Vector

We can store and manage a list of items using the Java Collections Framework classes ArrayList and Vector. Nonetheless, it's crucial to recognise some significant distinctions between the two. We will examine the efficiency, synchronisation, and iterator capabilities of ArrayList and Vector, as well as their similarities and differences, in this tutorial. You will have a comprehensive knowledge of when to utilise ArrayList or Vector in your Java projects by the end of this course. then let's get going!

What is an ArrayList?

Java's ArrayList class offers an implementation of a dynamic array. It is a resizable array that may store a collection of items of any data type, including references to objects and primitive data types such as "int" and "double". It keeps elements in a single continuous block of memory; in that way an ArrayList is identical to a conventional array.

ArrayLists, as opposed to standard arrays, can expand or contract dynamically as new or removed members are added. This indicates that an ArrayList can hold a variable number of elements without the programmer having to predetermine its size.

ArrayLists are frequently used in Java due to their ease and flexibility. They offer a straightforward method for handling and storing collections of things, and it is simple to search, sort, and filter them. Moreover, ArrayLists provide a variety of helpful methods for modifying and querying their contents because they are implemented as objects.

Advantages of ArrayList

  • Simple to use − Because ArrayLists are implemented as objects and include a variety of helpful methods for manipulating and querying their contents, they are simple to use.

  • Resizable − Because ArrayLists are resizable, any size collection of elements can be stored in them without the need for the programmer to explicitly specify their size.

  • Quick Access − ArrayLists can be accessed rapidly because, like arrays, they make use of an index-based method.

Disadvantages of ArrayList

  • Overhead − ArrayLists may require more memory than arrays due to the overhead they incur. The ArrayList class's added functionality is to blame for this overhead.

  • Performance degradation − Due to the additional functionality offered by the ArrayList class, ArrayLists may perform less quickly than arrays.

  • Type Safety − ArrayLists, unlike arrays, are not type-safe, allowing the addition of elements of various data types to an ArrayList. Runtime errors may result from this.

  • Cost of resizing − Resizing an array list may require allocating new memory and copying the components to the new position in memory, which can be costly in terms of both time and memory.

What is Vector Class?

Java's Vector class offers a dynamic array implementation that is comparable to ArrayList. A Vector, like an ArrayList, can store a collection of objects of any data type, including references to objects and primitive data types.

As Vector is a synchronised class and all of its methods are thread-safe, this is the main distinction between it and ArrayList. Hence, a Vector object may be accessed and modified by numerous threads without risk of synchronisation problems.

In addition, Vector offers a number of other methods not found in ArrayList, such as methods for retrieving and altering the Vector's capacity as well as methods for inserting and removing elements at precise locations. Unfortunately, due to the costs associated with Vector's thread-safety, these extra methods may have a negative impact on performance.

Because synchronised collections can be less effective than their unsynchronized counterparts and because Java provides other thread-safe collection classes, such as the ConcurrentLinkedQueue and CopyOnWriteArrayList, vectors are typically used less frequently than ArrayLists in contemporary Java development. Yet, in some circumstances where thread-safety is a problem and the extra functionality offered by vectors is needed, they can still be helpful.

Advantages of Vectors

  • Thread safety − As Vector is a synchronised class, all of its methods are protected from overlapping threads. This makes it an excellent option for applications that use several threads and may require simultaneous access to and modification of the same collection of objects.

  • Dynamic size − Because vectors may be resized, they can hold a range of elements without the programmer having to predetermine their size.

  • Additional features − In addition to the methods provided by ArrayList, Vectors also offer methods for acquiring and altering the vector's capacity as well as methods for adding and removing components at precise locations.

Disadvantages of Vectors

  • Performance − Vector may be slower than ArrayList in single threaded applications due to the overhead associated with its thread-safety.

  • Cost of resizing − Just like an ArrayList, a vector may need to allocate new memory and copy the items to the new position. This can be costly in terms of both time and memory.

  • Type safety − Similar to ArrayLists, Vectors lack type safety, making it easy to add components of various data types to a Vector. Runtime errors may result as a result.

  • Less frequently used − Due to its performance overhead and the availability of other, more effective thread-safe collection classes, Vectors are typically used less frequently in modern Java development than ArrayLists or other thread-safe collection classes.

Difference between ArrayList and Vector

The following table highlights the major differences between ArrayList and Vector −



The array list is not synced.

The vector is coordinated.

If the array's capacity is exceeded, ArrayList increases the size of the array by 50%.

If there are more elements than the array can hold, a vector increment of 100% doubles the size of the array..

ArrayList is not a legacy class. It is introduced in JDK 1.2.

Vector is a legacy class

As ArrayList is not synchronised, it is quick.

Due to its synchronisation, vector is slow since it keeps other threads in a runnable or non-runnable state in a multithreading environment until the current thread releases the lock on the object.

The Iterator interface is used by ArrayList to iterate across the entries.

A Vector can navigate the elements using either the Iterator interface or the Enumeration interface.


In conclusion, Java classes ArrayList and Vector both offer implementations of dynamic arrays. While ArrayList performs better in single-threaded applications, Vector is a better option for multi-threaded applications because to its synchronised operations.

In addition, Vector offers a number of extra methods that ArrayList does not. Yet, the performance cost of Vector's thread-safety makes it less popular than ArrayList in contemporary Java development.

Updated on: 19-Apr-2023


Kickstart Your Career

Get certified by completing the course

Get Started