How to Convert Array to ArrayList in Java?
This is a question that I wanted to take a look at for myself, because it is one of the top viewed and voted questions in stackoverflow.
The question asks how to convert the following array to an ArrayList.
Element[] array = {new Element(1),new Element(2),new Element(3)};
1. Most popular and accepted answer
The most popular and the accepted answer is the following:
ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array));
First, let’s take a look at the Java Doc for the constructor method of ArrayList.
ArrayList
- ArrayList(Collection c)
Constructs a list containing the elements of the specified
collection, in the order they are returned by the collection’s iterator.
So what the constructor does is the following:
1. Convert the collection c to an array
2. Copy the array to ArrayList’s own back array called “elementData”
If the add() method is invoked now, the elementData array will be copied to a new larger array. As from the code below, the size grows 1.5 times of old size.
public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity) newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } }
2. Next popular answer
The next popular answer is:
List<Element> list = Arrays.asList(array);
It is not the best, because the size of the list returned from asList() is fixed. We know ArrayList is essentially implemented as an array, and the list returned from asList() is a fixed-size list backed by the original array. In this way, if add or remove elements from the returned list, an UnsupportedOperationException will be thrown.
list.add(new Element(4));Exception in thread “main” java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
at collection.ConvertArray.main(ConvertArray.java:22)
3. Indications of the question
Every Java programmer knows ArrayList, it is simple but easy to make such a mistake. I guess that is why this question is so popular. If a similar question asked about a Java library in a specific domain, it would be less likely to become so popular.
There are several answers that basically indicate the same solution. This is true for a lot of questions, I guess people just don’t care, they like talking!
Reference: stackoverflow question
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)