File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Java in General and the fly likes Collections Framework - use of Vector Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Collections Framework - use of Vector" Watch "Collections Framework - use of Vector" New topic

Collections Framework - use of Vector

Ben Wood
Ranch Hand

Joined: Aug 14, 2001
Posts: 342
One of my favourite things to use in my Java prorgams is Vector, but I have recently been reading up on the Collections Framework. I have to admit I haven't looked at this before, but I'm now studying for SCJP so I figure it's time to start learning some more stuff
I am reading that Vector has been retrofitted to work with the Collections Framework, but my question is; should I now be considering using something else in place of Vector - is it now just there for backwards compatibility?
Should I be doing the following:

Instead of:

What will be the ramifications of leaving Vectors in my old code, or indeed what is the consequence of continuing to use Vector in new code? Should I stop at once!?

SCJP 1.4,
Max Habibi
town drunk
( and author)

Joined: Jun 27, 2002
Posts: 4118
You probably shouldn't use Vectors unless you need synchronization, and you probably should used a synchronized ArrayList even for that.
All best,

Java Regular Expressions
Jeroen Wenting
Ranch Hand

Joined: Oct 12, 2000
Posts: 5093
Vector is effectively superceded by the more modern List classes from the Collections framework.
These offer more functionality and improved performance.
There's no reason to go and refactor all your existing code to use Lists, but using them in new code is certainly a good idea.
Personally, I've not used a Vector in years and I don't miss them

Gayatri Keshkamat

Joined: Feb 25, 2004
Posts: 4
A little bit to add......
Sometimes Vector is better; sometimes ArrayList is better; sometimes you don't want to use either. the answer depends upon what you are doing. There are four factors to consider:
�Data growth
�Usage patterns
Vectors are synchronized. Any method that touches the Vector's contents is thread safe. ArrayList, on the other hand, is unsynchronized, making them, therefore, not thread safe. With that difference in mind, using synchronization will incur a performance hit. So if you don't need a thread-safe collection, use the ArrayList.
Data growth
Internally, both the ArrayList and Vector hold onto their contents using an Array. You need to keep this fact in mind while using either in your programs. When you insert an element 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. Depending on how you use these classes, you could end up taking a large performance hit while adding new elements. It's always best to set the object's initial capacity to the largest capacity that your program will need. By carefully setting the capacity, you can avoid paying the penalty needed to resize the internal array later. If you don't know how much data you'll have, but you do know the rate at which it grows, Vector does possess a slight advantage since you can set the increment value.
Usage patterns
Both the ArrayList and Vector are good for retrieving elements from a specific position in the container or for adding and removing elements from the end of the container. All of these operations can be performed in constant time -- O(1). However, adding and removing elements from any other position proves more expensive -- linear to be exact: O(n-i), where n is the number of elements and i is the index of the element added or removed. These operations are more expensive because you have to shift all elements at index i and higher over by one element. So what does this all mean?
It means that if you want to index elements or add and remove elements at the end of the array, use either a Vector or an ArrayList. If you want to do anything else to the contents, go find yourself another container class. For example, the LinkedList can add or remove an element at any position in constant time -- O(1). However, indexing an element is a bit slower -- O(i) where i is the index of the element. Traversing an ArrayList is also easier since you can simply use an index instead of having to create an iterator. The LinkedList also creates an internal object for each element inserted. So you have to be aware of the extra garbage being created.
I agree. Here's the link:
subject: Collections Framework - use of Vector
jQuery in Action, 3rd edition