ArrayList vs Vector in Java
ArrayList and Vector are the two most widely used Collection classes in Java and are used to store objects in an ordered fashion. Every Java programmer which is introduced to Java Collection Framework either started with Vector or ArrayList. For beginners Difference between Vector and ArrayList in Java and LinkedList vs ArrayList are the two most popular Java Interview questions. ArrayList vs Vector is not only important from an interview perspective but also on the effective use of Java Collection API.
ArrayList and Vector are the two most widely used Collection classes in Java and are used to store objects in an ordered fashion. Every Java programmer which is introduced to Java Collection Framework either started with Vector or ArrayList. For beginners Difference between Vector and ArrayList in Java and LinkedList vs ArrayList are the two most popular Java Interview questions. ArrayList vs Vector is not only important from an interview perspective but also on the effective use of Java Collection API.
After reading this article you will know when to use Vector in Java, When to use ArrayList in Java, and would be able to compare ArrayList vs Vector over several important parameters like Speed, Synchronization, Code quality etc.
Before seeing difference on Vector vs ArrayList, let's What is common between them :
1. Bother Vector and ArrayList are derived from AbstractList and implements List interface, which means both of them are ordered collection and allows duplicates.
2. Another similarity between Vector vs ArrayList is that both are index based Collection and you can use get(index) method to retrieve objects from Vector and ArrayList.
Vector vs ArrayList in Java
In last section we saw some common properties between both of them and its time to see How much ArrayList and Vector are different to each other.1. Synchronization
the first and most common difference between Vector vs ArrayList is that Vector is synchronized and thread-safe while ArrayList is neither Synchronized nor thread-safe. Now, What does that mean? It means if multiple thread try to access Vector same time they can do that without compromising Vector's internal state. Same is not true in case of ArrayList as methods like add(), remove() or get() is not synchronized.
2. Speed
2. Speed
The second major difference on Vector vs ArrayList is Speed, which is directly related to previous difference. Since Vector is synchronized, its slow and ArrayList is not synchronized its faster than Vector.
3. Legacy Class
The third difference on Vector vs ArrayList is that Vector is a legacy class and initially it was not part of the Java Collection Framework. From Java 1.4 Vector was retrofitted to implement List interface and become part of Collection Framework.
These were some comparison on Vector vs ArrayList. In Summary use ArrayList if you are using ArrayList in Single threaded environment and use Vector if you need a thread-safe collection. ArrayList is anytime faster than Vector in case thread-safety is not a concern.
Further Learning
Hashtable vs HashMap in Java
ArrayList vs HashMap in Java
wait vs sleep in Java
10 tough core Java questions - Answered
The correct answer should be... if you're still using Vectors, you need to crawl out from under your rock and take a look around. Vectors should not be used any more. See http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered-obsolete-or-deprecated for an explanation of why.
ReplyDeleteExactly, When to people start asking about questions like ArrayList vs Vector, HashMap vs Hashtable etc. Instead, they should ask about hashing, linked list data structure or at least when to use which kind of Collection is not too bad either.
DeleteVector is Synchronized, so how can multiple threads can access simultaneously ??? I think there is some mistake in the answer. Please correct it.
ReplyDeleteThanks.
vector is synchronized implies that, threads of same obj cant access simultaneously..but threads of different objects can do it.
ReplyDeletein all these years how many have opened ArrayList.java and Vector.java to check if there is more to those 3 differences. i did 10 years ago and founnd the 4th difference. may be i could find more if i look at them again !
ReplyDeleteHi Rajesh Pitty,
DeleteCan you please let us know wat all the changes you have observed . I have observed as 1. All the methods in Vector synchronized. where method in tat are not synchronized.
2. Serial version id positive in Vector, where in case of ArrayList serial version id is negative.
Instead of vector, its better to use synchronized ArrayList because Vector is now old and obsolete and can be removed in future verison.
ReplyDeleteSince vectors are synchronized hence one thread thread can access at once and others are going to wait in a queue..and in case of Array list multiple thread are going to access at the same time..there is a mistake in above explanation.
ReplyDeleteYes, u r correct @ Hemant..
DeleteAs of the Java 2 platform v1.2, this class was retrofitted to implement the List interface, making it a member of the Java Collections Framework.
ReplyDelete