1.官方文檔的解釋
public static <T> List<T> asList(T... a)
返回由指定數組支持的固定大小的列表。(將返回的列表更改為“寫入數組”。)該方法作為基於數組和基於集合的API之間的橋梁,與Collection.toArray()相結合。返回的列表是可序列化的,並實現RandomAccess。
此方法還提供了一種方便的方式來創建一個初始化為包含幾個元素的固定大小的列表:
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
這個方法在刷LeetCode中三個數之和時用到:
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.List; 4 5 class Solution { 6 public static List<List<Integer>> threeSum(int[] nums) { 7 List<List<Integer>> result = new ArrayList<>(); 8 int len = nums.length; 9 if (nums == null || len < 3) 10 return result; 11 Arrays.sort(nums); 12 for (int i = 0; i < len; i++) { 13 if (nums[i] > 0) 14 break; 15 if (i > 0 && nums[i] == nums[i - 1]) // 去重 16 continue; 17 // 雙指針 18 int L = i + 1; 19 int R = len - 1; 20 while (L < R) { 21 int sum = nums[i] + nums[L] + nums[R]; 22 if (sum == 0) { 23 result.add(Arrays.asList(nums[i], nums[L], nums[R])); // 使用asList()方法將逗號分隔的元素列表轉換為一個List對象 24 while (L < R && nums[L] == nums[L + 1]) 25 L++; 26 while (L < R && nums[R] == nums[R - 1]) 27 R--; 28 L++; 29 R--; 30 } else if (sum < 0) { 31 L++; 32 } else if (sum > 0) { 33 R--; 34 } 35 } 36 } 37 return result; 38 } 39 } 40 41 public class ThreeSum { 42 43 public static void main(String[] args) { 44 Solution s = new Solution(); 45 int nums[] = {-1,0,1,2,-4}; 46 System.out.println(s.threeSum(nums)); 47 } 48 49 }
2.《Java編程思想》中通俗一點的解釋:
Arrays.asList()方法接受一個數組或是一個用逗號分隔的元素列表(使用可變參數),並將其轉換為一個List對象。
代碼示例:
1 Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5)); 2 Integer[] moreInts = {6, 7, 8, 9, 10}; 3 collection.addAll(Arrays.asList(moreInts)); 4 5 List<Integer> list = Arrays.asList(16, 17, 18, 19, 20); 6 list.set(1, 99); // 更改元素可以 7 // list.add(21); // 添加元素不行。因為此時其底層表示的是數組,因此不能調整尺寸
另外,Arrays.asList()方法的限制是它對所產生的List的類型做出了最理想的假設,而並沒有注意你對它會賦予什么樣的類型。有時這會引發問題。比如繼承類的時候,詳細的代碼示例參考《Java編程思想》第十一章的持有對象。
