1
votes

Referring to Difference between Arrays.asList(array) vs new ArrayList<Integer>(Arrays.asList(ia)) in java I was curious as in what's the exact purpose of Arrays.asList() method.

When we create a new List from it, say for example -

Integer[] I = new Integer[] { new Integer(1), new Integer(2), new Integer(3) };
List<Integer> list1 = Arrays.asList(I);
List<Integer> list2 = ((List<Integer>) Arrays.asList(I));

We cannot perform most of the the regular operations on it like .add(), .remove(). Thus, I was not able add an iterator to it to avoid concurrent modification.

Oracle docs state

public static List asList(T... a)

Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.) This method acts as bridge between array-based and collection-based APIs, in combination with Collection.toArray(). The returned list is serializable and implements RandomAccess.

It works well with creating a new List. List<Integer> list3 = new ArrayList<>(Arrays.asList(I));

So, why this and what are its advantages and disadvantages?

1
One is a List view of an array. The other is a copy of an array into an entirely separate List. You're comparing apples and oranges.Boris the Spider
It's the shortest way to get a list. Arrays.asList("Alpha", "Beta"). And it is explicitly backed by the array you give it - you can use it to actually modify an array if that's what you need.khelwood
If you already have an Integer[], then there's probably not a huge difference between Arrays.asList and ArrayList (unless you need the ArrayList's functionality, of course). But if you don't, then List<Integer> list1 = Arrays.asList(1, 2, 3) is pretty convenient.yshavit
It's useful for creating and populating a list in a single line. private static final List<String> VALID_INPUTS = Arrays.asList("Cat","Dog","Mouse");Michael

1 Answers

1
votes

Not being able to call add, remove, etc is the exact difference. If you don't need those methods, Arrays.asList gives you a perfectly fine view of the array as a List (for APIs that take collections rather than arrays). If you need to change the "shape" of the list, then new ArrayList<>(Arrays.asList(myArray)) is the way to go.