Convert list to array python stack overflow

How to Convert Array to ArrayList in Java?

Category: Collections April 16, 2013

This article analyzes answers for a top-voted questions on Stack Overflow. The person who asked this question got a lot of reputation points, which could grant him permissions to do a lot of things on Stack Overflow. This does not make sense to me, but let's take a look at the question first.

The question is "how to convert the following array to an ArrayList?".

Element[] array = {new Element(1),new Element(2),new Element(3)};

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));

ArrayList arrayList = new ArrayList(Arrays.asList(array));

First, let's take a look at the Java Doc for the constructor method of ArrayList.

ArrayList(Collection < ? extends E > 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"

Here is the source code of Contructor of ArrayList.

public ArrayList(Collection extends E> c) { elementData = c.toArray(); size = elementData.length; if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); }

public ArrayList(Collection c) { elementData = c.toArray(); size = elementData.length; if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); }

2. Next popular answer

The next popular answer is:

List<Element> list = Arrays.asList(array);

List list = Arrays.asList(array);

It is not the best, because the size of the list returned from asList() is fixed. Actually the list returned is not java.util.ArrayList, but a private static class defined inside java.util.Arrays. 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));

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. Another Solution

This solution is from Otto's comment below.

Element[] array = {new Element(1), new Element(2)}; List<element> list = new ArrayList<element>(array.length); Collections.addAll(list, array);

Element[] array = {new Element(1), new Element(2)}; List list = new ArrayList(array.length); Collections.addAll(list, array);

4. Indications of the question

The problem is not hard, but interesting. Every Java programmer knows ArrayList, but it's 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 provide the same solution. This is also true for a lot of other questions on Stack Overflow, I guess people just don't care what others say if they would like to answer a question!

Reference: The stackoverflow question link

  1. Deep Understanding of ArrayList.iterator()
  2. Java Remove Element from ArrayList
  3. Top 10 Methods for Java Arrays
  4. Java: convert image to byte array, convert byte array to image
Category >> Collections