-1

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?

Community
  • 1
  • 1
Devendra Lattu
  • 2,732
  • 2
  • 18
  • 27
  • 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](https://en.wikipedia.org/wiki/Apples_and_oranges). – Boris the Spider Apr 03 '17 at 14:20
  • 1
    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 Apr 03 '17 at 14:20
  • 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 list1 = Arrays.asList(1, 2, 3)` is pretty convenient. – yshavit Apr 03 '17 at 14:24
  • It's useful for creating and populating a list in a single line. `private static final List VALID_INPUTS = Arrays.asList("Cat","Dog","Mouse");` – Michael Apr 03 '17 at 14:27

1 Answers1

1

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.

Juan C Nuno
  • 476
  • 1
  • 3
  • 8