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?".
|
1. Most popular and accepted answer
The most popular and the accepted answer is the following:
|
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.
|
2. Next popular answer
The next popular answer is:
|
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.
|
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.
|
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!