Arrays.asList() 是一個 Java 的靜態方法,它可以把一個數組或者多個參數轉換成一個 List 集合。這個方法可以作為數組和集合之間的橋梁,方便我們使用集合的一些方法和特性。本文將介紹 Arrays.asList() 的語法、應用場景、坑點和總結。 語法 應用場景 坑點 總結 語法 ...
Arrays.asList() 是一個 Java 的靜態方法,它可以把一個數組或者多個參數轉換成一個 List 集合。這個方法可以作為數組和集合之間的橋梁,方便我們使用集合的一些方法和特性。本文將介紹 Arrays.asList() 的語法、應用場景、坑點和總結。
- 語法
- 應用場景
- 坑點
- 總結
語法
Arrays.asList() 的語法格式如下:
public static <T> List<T> asList(T... a)
這個方法接受一個泛型參數 T,表示數組或者參數的類型。T 必須是一個引用類型,不能是一個基本類型,例如 int, double, char 等。如果傳入一個基本類型的數組,Arrays.asList() 會把它當作一個 Object 類型的元素,而不是把它的每個元素當作 Object 類型。這樣就會導致返回的 List 只有一個元素,就是原始數組本身。
Arrays.asList() 返回的 List 是一個 Arrays 類的內部類,它持有一個對原始數組的引用。這意味著對 List 的修改會反映到數組上,反之亦然。但是,這個 List 的大小是固定的,不能進行增加或者刪除的操作,否則會拋出 UnsupportedOperationException 異常。
Arrays.asList() 返回的 List 是可序列化的,並且實現了 RandomAccess 介面,表示它支持隨機訪問。
應用場景
Arrays.asList() 可以用在以下幾種場景中:
- 當我們需要創建一個不需要改變大小或者內容的 List 集合時,我們可以使用 Arrays.asList() 來快速地初始化一些元素。例如:
// 使用 Arrays.asList() 創建一個不可變的 List
List<String> list = Arrays.asList("a", "b", "c");
System.out.println(list); // [a, b, c]
- 當我們需要創建一個空的或者單元素的 List 集合時,我們可以使用 Arrays.asList() 來簡化代碼。例如:
// 使用 Arrays.asList() 創建一個不可變的空 List
List<String> emptyList = Arrays.asList();
System.out.println(emptyList); // []
// 使用 Arrays.asList() 創建一個不可變的單元素 List
List<String> singletonList = Arrays.asList("a");
System.out.println(singletonList); // [a]
- 當我們需要從一個數組或者其他集合類創建一個不可變的 List 集合時,我們可以使用 Arrays.asList() 來方便地轉換。例如:
// 使用 Arrays.asList() 從數組創建一個不可變的 List
String[] array = {"a", "b", "c"};
List<String> listFromArray = Arrays.asList(array);
System.out.println(listFromArray); // [a, b, c]
// 使用 Arrays.asList() 從其他集合類創建一個不可變的 List
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
List<String> listFromSet = Arrays.asList(set.toArray(new String[0]));
System.out.println(listFromSet); // [a, b, c]
- 當我們需要使用一些集合類的方法或者特性時,我們可以使用 Arrays.asList() 來把數組轉換成集合。例如:
// 使用 Arrays.asList() 把數組轉換成集合,並使用 Collections 類的方法
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
Collections.sort(list); // 對集合進行排序
System.out.println(list); // [a, b, c]
Collections.reverse(list); // 對集合進行反轉
System.out.println(list); // [c, b, a]
Collections.shuffle(list); // 對集合進行隨機打亂
System.out.println(list); // [b, a, c] 或者其他隨機順序
// 使用 Arrays.asList() 把數組轉換成集合,並使用 Stream API
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
list.stream().forEach(System.out::println); // 對集合進行遍歷並列印每個元素
list.stream().map(String::toUpperCase).forEach(System.out::println); // 對集合進行映射並列印每個元素的大寫形式
list.stream().filter(s -> s.startsWith("a")).forEach(System.out::println); // 對集合進行過濾並列印以 a 開頭的元素
坑點
Arrays.asList() 也有一些坑點,需要註意以下幾點:
- Arrays.asList() 不支持基本數據類型的數組,因為它只能接受 Object 類型的參數或者數組。基本數據類型(如 int, double, char 等)不是 Object 的子類,所以不能直接作為 Arrays.asList() 的參數。如果傳入一個基本數據類型的數組,Arrays.asList() 會把它當作一個 Object 類型的元素,而不是把它的每個元素當作 Object 類型。這樣就會導致返回的 List 只有一個元素,就是原始數組本身。
如果想要把一個基本數據類型的數組轉換成 List,有以下幾種方法:
- 使用迴圈遍曆數組,並把每個元素添加到 List 中。這樣可以利用自動裝箱(autoboxing)的特性,把基本數據類型轉換成對應的包裝類(如 Integer, Double, Character 等)。
- 使用 Java 8 中的 Stream API,可以用一行代碼實現數組到 List 的轉換。可以使用 Arrays.stream() 或者 IntStream.of() 等方法,然後調用 boxed() 和 collect() 方法。
- 使用第三方庫,如 Guava 或者 Apache Commons Lang,它們提供了一些工具類和方法來處理基本數據類型的數組和集合。
示例代碼如下:
// 使用迴圈遍曆數組,並把每個元素添加到 List 中
int[] array = {1, 2, 3};
List<Integer> list = new ArrayList<>();
for (int num : array) {
list.add(num); // 利用自動裝箱
}
System.out.println(list); // [1, 2, 3]
// 使用 Stream API 實現數組到 List 的轉換
int[] array = {1, 2, 3};
List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
System.out.println(list); // [1, 2, 3]
// 使用 Guava 實現數組到 List 的轉換
int[] array = {1, 2, 3};
List<Integer> list = Ints.asList(array);
System.out.println(list); // [1, 2, 3]
- Arrays.asList() 返回的 List 是不可變的,也就是說,不能對它進行增加或者刪除的操作,否則會拋出 UnsupportedOperationException 異常。這是因為 Arrays.asList() 返回的 List 是一個 Arrays 類的內部類,它沒有實現 add() 和 remove() 等方法。
如果想要創建一個可變的 List 集合,有以下幾種方法:
- 使用 ArrayList 的構造器,並把 Arrays.asList() 作為參數傳入。這樣可以創建一個新的 ArrayList 對象,並複製原始數組中的元素。例如:
// 使用 ArrayList 的構造器創建一個可變的 List
String[] array = {"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(array));
System.out.println(list); // [a, b, c]
list.add("d"); // 可以增加元素
System.out.println(list); // [a, b, c, d]
- 使用 Java 8 中的 Stream API,可以用一行代碼實現數組到 List 的轉換。可以使用 Arrays.stream() 或者 IntStream.of() 等方法,然後調用 collect() 方法。例如:
// 使用 Stream API 實現數組到 List 的轉換
int[] array = {1, 2, 3};
List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
System.out.println(list); // [1, 2, 3]
list.add(4); // 可以增加元素
System.out.println(list); // [1, 2, 3, 4]
總結
Arrays.asList() 是一個簡單而有用的方法,它可以幫助我們把數組轉換成 List 集合。但是它也有一些限制和註意事項,我們應該根據具體的需求和場景來選擇合適的方法。希望這篇文章對你有所幫助,謝謝您的閱讀。