Ryan Thames
Ryan Thames

Reputation: 3204

ArrayList vs. Vectors in Java if thread safety isn't a concern

Is there really that much of a difference between the performance of Vector and ArrayList? Is it good practice to use ArrayLists at all times when thread safety isn't an issue?

Upvotes: 30

Views: 17461

Answers (4)

Aaron
Aaron

Reputation: 19721

If thread safety is not an issue, ArrayList will be faster as it does not have to synchronize. Although, you should always declare your variable as a List so that the implementation can be changed later as needed.

I prefer to handle my synchronization explicitly because a lot of operations require multiple calls. For example:

if (!myList.isEmpty()) { 
    myList.get(0);
}

should be:

synchronized (myList) {
   if (!myList.isEmpty()) { 
       myList.get(0);
   }
}

Upvotes: 15

Christian P.
Christian P.

Reputation: 4884

Vector originates back from the pre-Collections API days, and have been retrofitted since to be a part of it. From what I've read, the reason it is not deprecated is because the core API depends on it.

ArrayList was written from scratch as a part of the Collections API and as such should be used unless you need to support Java versions down to 1.2.

If you need a thread-safe ArrayList, you can use the static factory method Collections.synchronizedList(new ArrayList<type>); to generate your list.

Upvotes: 40

bruno conde
bruno conde

Reputation: 48265

If thread safety isn't an issue you should always use ArrayList. Vector has the overhead of synchronization and it has been shown that the performance differences between ArrayList and Vector are abysmal. You can google for a lot of performance benchmarks.

Here's one Timing & Performance.

Upvotes: 9

James Schek
James Schek

Reputation: 17960

Ignoring synchronization, the main difference between Vector and ArrayList is that Vector is a resizable array (similar to a C++ STL Vector) and ArrayList is a List that happens to be backed by an array.

The difference manifests itself in the setSize() method. There is no equivalent method in ArrayList. Some ex-C++ Java developers get hung up on this. There are a number of easy ways to work around it so it shouldn't be an issue.

Just don't make the mistake of telling a C++ developer that an ArrayList is the equivalent to a std::vector. You'll never hear the end of it.

Upvotes: 5

Related Questions