Arrays.asList()用法
使用Arrays.asList()的原因無非是想將數組或一些元素轉為集合,而你得到的集合並不一定是你想要的那個集合。
而一開始asList的設計時用於打印數組而設計的,但jdk1.5開始,有了另一個比較更方便的打印函數Arrays.toString(),於是打印不再使用asList(),而asList()恰巧可用於將數組轉為集合。
public class App { public static void main(String[] args) { List<String> stringA = Arrays.asList("A"); String[] stringArray = {"B"}; List<String> stringB = Arrays.asList(stringArray); System.out.println(stringA); System.out.println(stringB); } }
運行結果
[A] [B]
public class App { public static void main(String[] args) { int[] intarray = {1, 2, 3, 4, 5}; //List<Integer> list = Arrays.asList(intarray); 編譯通不過 List<int[]> list = Arrays.asList(intarray); System.out.println(list); } } output: [[I@66d3c617]
你是不是以為上面 👆那個 list 是 java.util.ArrayList ?
實際上返回的是:java.util.Arrays.ArrayList
源碼:
但它和ArrayList貌似很像唉!有什么不同嗎?
不同之處:
Arrays.ArrayList 是工具類 Arrays 的一個內部靜態類,它沒有完全實現List的方法,而 ArrayList直接實現了List 接口,實現了List所有方法。
-
長度不同 和 實現的方法不同
Arrays.ArrayList是一個定長集合,因為它沒有重寫add,remove方法,所以一旦初始化元素后,集合的size就是不可變的。
-
參數賦值方式不同
Arrays.ArrayList將外部數組的引用直接通過“=”賦予內部的泛型數組,所以本質指向同一個數組。
ArrayList是將其他集合轉為數組后copy到自己內部的數組的。
所以使用Arrays.asList()需要注意以下兩點。
一、不能把基本數據類型轉化為列表
仔細觀察可以發現asList接受的參數是一個泛型的變長參數,而基本數據類型是無法泛型化的,如下所示:
public
class
App {
public
static
void
main(String[] args) {
int
[] intArray = {
1
,
2
,
3
,
4
};
List<Integer> list = Ints.asList(intArray);
list.set(
0
,
100
);
System.out.println(Arrays.toString(intArray));
list.add(
5
);
list.remove(
0
);
}
}
這是因為把int類型的數組當參數了,所以轉換后的列表就只包含一個int[]元素。
要想把基本數據類型的數組轉化為其包裝類型的list,可以使用guava類庫的工具方法,示例如下:
int[] intArray = {1, 2, 3, 4}; List<Integer> list = Ints.asList(intArray);
支持基礎類型的方式
1、如果使用Spring
2、如果使用Java 8
數組轉ArrayList
1、遍歷轉換
2、使用工具類
3、如果使用Java 8
既可以用於基本類型也可以返回想要的集合。
自己比較常用
int a [] ={1,2,3}; List<Integer> ilist = Arrays.stream(a).boxed() .collect(Collectors.toList()); System.out.println(ilist);
4、兩個集合類結合