Platinum Partner
java,tips and tricks

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

 

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}