Java : Difference of Arrays.asList() & List.of()

I just want to record the difference between Arrays.asList() and List.of(), as they are used in one of my technical interviews.

The purpose is simple : creating a List and manipulating it with stream (nowadays it's much faster to write a collection with stream), and these two methods were taken into consideration then.


Arrays.asList() and List.of() are both methods for creating a List object. Both methods can use get(int index), but not add(T obj) and remove(int index), the main differences are :

  • Arrays.asList()
    • We can use set(int, T obj)
    • API introduced in Java 1.2
  • List.of()
    • We can't use set(int, T obj)
    • API introduced in Java 9

That is, Arrays.asList() can modify values, and List.of() values are read-only, then consider the following reasons that I used to solve the problem.

  • Creating a new stream instead of modifying the original List

I decided to use List.of() instead of Arrays.asList().
code reference

List<String> orgin = List.of("1", "2", "3");

List<String> modify = orgin.stream()
                .map(s -> "TEST-" + s)
                .collect(Collectors.toList());
        System.out.println(modify);

        // [TEST-1, TEST-2, TEST-3]

這篇簡單紀錄一下 Arrays.asList()List.of() 的差異,因為面試有用到。

使用情境滿單純的,就是建立一個 List 然後用 stream 去操縱它們 (現在用 stream 寫 collection 會快很多,滿多公司都有考用法),那時候就有考慮到這兩個方法。

Arrays.asList()List.of() 這兩個都是建立 List object 的方法,這兩個方法都能用 get(int index),但不能用 add(T obj)remove(int index),比較主要的差異為

  • Arrays.asList()
    • 可以用 set(int, T obj)
    • Java 1.2 推出的 API
  • List.of()
    • 不能用 set(int, T obj)
    • Java 9 之後才有

也就是說,Arrays.asList() 可以修改值,List.of() 的值是唯讀的,那時候考量

  • 我需要建立一個新的 stream 輸出,而不是修改原始的 List

所以使用 List.of() 而不是 Arrays.asList()

大概是這樣子,code 可以參考上面囉。