前言
說起陣列轉換成 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的本質就是迭代器,寫法更加簡潔。
這裡程式碼就做展示了。