Java中將 int[] 陣列 轉換為 List(ArrayList)

JadeTal 發表於 2022-12-09
Java

前言

說起陣列轉換成 ArrayList,很多同學第一反應就是遍歷陣列,將元素逐個新增到 ArrayList 中,但是這個看著就lower,一般不會這麼答。

所以馬上就會想到Arrays工具類的 asList 方法,如果你這麼答,那麼恭喜你,答錯入坑。

為什麼不能用 Arrays 的 asList 方法將 int[] 裝換成 ArrayList

如果此處陣列 int[] 換作是 Integer[] 或者任何一個引用型別元素的陣列都正確,Arrays 的 asList 方法只能轉換引用型別元素的陣列。
asList 方法的原始碼就是這麼定義的:

    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }


    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {

注意:Arrays.asList(T... a)返回的List中元素是不可變的。
從原始碼可以看出Arrays.asList(T... a)返回的是一個ArrayList,但是這個ArrayList是Arrays的內部類,不是我們集合框架下的那個ArrayList。

使用stream進行轉換(jdk8 推薦)

jdk版本低於1.8不可以使用。

陣列透過 Arrays 工具類的 stream() 方法進行流化,獲取 Stream 物件。boxed()方法是用來裝箱的。

int[] arys = {1,2,3};
List<Integer> list = Arrays.stream(arys).boxed().collect(Collectors.toList());

要轉化為ArrayList還需要進行一次強制型別轉化

遍歷陣列,逐個加入元素到List中

可以使用for、增強for迴圈、迭代器。
使用for迴圈遍歷陣列,效能稍微好那麼一丟丟。增強for的本質就是迭代器,寫法更加簡潔。
這裡程式碼就做展示了。