Reputation: 315
Previously I would always have thought a Vector was good to use for non-descript objects when length was unknown. As far as I was aware I thought it was thread-safe too
What would change that Vector
shouldn't be used anymore, and what is the alternative?
Upvotes: 29
Views: 29138
Reputation: 187499
Use ArrayList
when you need a List
implementation but don't need thread safety, and use CopyOnWriteArrayList
when you need a List
implementation that is thread safe.
Upvotes: 7
Reputation: 206796
Vector
is a legacy collection class from Java 1.0. In Java 1.2 (long ago!), the Collections Framework was added which included new collection classes such as ArrayList
and HashMap
, which were intended to replace the legacy classes Vector
and Hashtable
.
As said before, the legacy collection classes had built-in synchronization, which is unnecessary for many applications. Synchronization has a performance overhead, so if it's not necessary, you shouldn't use it.
In some cases (when your program is multi-threaded, and multiple threads access the same data) you need to synchronize your collections. Some people would then use the old Vector
or Hashtable
classes, but a better way is to use a synchronization wrapper with for example an ArrayList
:
// Your standard, unsynchronized list
List<String> data = new ArrayList<String>();
// Use this to put it into a synchronization wrapper
List<String> syncedData = Collections.synchronizedList(data);
See the API documentation of Collections.synchronizedList()
(and other methods) for more information.
Upvotes: 7
Reputation: 29116
You should use ArrayList
instead of Vector
. Vector
used internal synchronisation, but that is rarely good enough for actual consistency, and only slows down execution when it is not really needed.
Also see this stackoverflow question.
Upvotes: 38
Reputation: 743
You can use an ArrayList
instead.
If you need a synchronized version, you can do something like:
ArrayList arrayList = new ArrayList();
List synchList = Collections.synchronizedList(arrayList);
Upvotes: 16
Reputation: 25277
ArrayList
is now the better class to use. Vector
is now considered Legacy, and has the added performance overhead of being Thread-Safe.
Upvotes: 8