What are the differences between the two data structures ArrayList and Vector, and where should you use each of them?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
Basically both ArrayList and Vector both uses internal Object Array.
ArrayList: The ArrayList class extends AbstractList and implements the List interface and RandomAccess (marker interface). ArrayList supports dynamic arrays that can grow as needed. It gives us first iteration over elements. ArrayList uses internal Object Array; they are created with an default initial size of 10. When this size is exceeded, the collection is automatically increases to half of the default size that is 15.
Vector: Vector is similar to ArrayList but the differences are, it is synchronized and its default initial size is 10 and when the size exceeds its size increases to double of the original size that means the new size will be 20. Vector is the only class other than ArrayList to implement RandomAccess. Vector is having four constructors out of that one takes two parameters Vector(int initialCapacity, int capacityIncrement) capacityIncrement is the amount by which the capacity is increased when the vector overflows, so it have more control over the load factor.
Some other differences are:
As the documentation says, a
Vector
and anArrayList
are almost equivalent. The difference is that access to aVector
is synchronized, whereas access to anArrayList
is not. What this means is that only one thread can call methods on aVector
at a time, and there's a slight overhead in acquiring the lock; if you use anArrayList
, this isn't the case. Generally, you'll want to use anArrayList
; in the single-threaded case it's a better choice, and in the multi-threaded case, you get better control over locking. Want to allow concurrent reads? Fine. Want to perform one synchronization for a batch of ten writes? Also fine. It does require a little more care on your end, but it's likely what you want. Also note that if you have an ArrayList, you can use theCollections.synchronizedList
function to create a synchronized list, thus getting you the equivalent of aVector
.ArrayList
is newer and 20-30% faster.If you don't need something explitly apparent in
Vector
, useArrayList
Differences
Use ArrayLists if there is no specific requirement to use Vectors.
Synchronization
If multiple threads access an ArrayList concurrently then we must externally synchronize the block of code which modifies the list either structurally or simply modifies an element. Structural modification means addition or deletion of element(s) from the list. Setting the value of an existing element is not a structural modification.
Collections.synchronizedList
is normally used at the time of creation of the list to avoid any accidental unsynchronized access to the list.Reference
Data growth
Internally, both the ArrayList and Vector hold onto their contents using an Array. When an element is inserted into an ArrayList or a Vector, the object will need to expand its internal array if it runs out of room. A Vector defaults to doubling the size of its array, while the ArrayList increases its array size by 50 percent.
Reference
Vector
came along with the first version of java development kit (JDK).ArrayList
was introduced in java version 1.2, as part of java collections framework.ArrayList
andVector
both useArray
as a data structure internally. Both classes keep the insertion order. They both allow duplicate and null values. However there are few differences in the way they store and process data.Synchronization
ArrayList
is non-synchronized which means multiple threads can work onArrayList
at the same time.Vector
is synchronized, which means only one thread at a time can access the code.Performance
ArrayList
gives better performance as it is non-synchronized .Vector
operations gives poor performance as they are thread-safe.Traversal
Data Growth
ArrayList
andVector
both grow and shrink dynamically to maintain optimal use of storage – but the way they resize is different.ArrayList
increments 50% of the current array size if the number of elements exceeds its capacity.Vector
increments 100% – essentially doubling the current array size.Legacy
Earlier versions of Java did not include the Collections Framework. The original classes were re-engineered to support the collection interface. These classes are known as Legacy classes.
ArrayList
is not a legacy class. It is introduced in JDK 1.2.Vector
is a legacy class.Set Increment Size
ArrayList
does not define the increment size .Vector
defines the increment size .If there is a need to perform “thread-safe” operation the
Vector
is your best bet as it ensures that only one thread access the collection at a time. But if there is no need for thread safe operation,ArrayList
is a better choice as performance will be improved because of the concurrent processes.ArrayList
andVector
both implements List interface and maintains insertion order.But there are many differences betweenArrayList
andVector
classes...ArrayList -
ArrayList
is not synchronized.ArrayList
increments 50% of current array size if number of element exceeds from its capacity.ArrayList
is not a legacy class, it is introduced in JDK 1.2.ArrayList
is fast because it is non-synchronized.ArrayList
uses Iterator interface to traverse the elements.Vector -
Vector
is synchronized.Vector
increments 100% means doubles the array size if total number of element exceeds than its capacity.Vector
is a legacy class.Vector
is slow because it is synchronized i.e. in multithreading environment, it will hold the other threads in runnable or non-runnable state until current thread releases the lock of object.Vector
uses Enumeration interface to traverse the elements. But it can use Iterator also.See Also : https://www.javatpoint.com/difference-between-arraylist-and-vector