为什么要慎用 Arrays.asList(T... a):
- 该方法返回定长的 List,不支持 add 和 remove 操作
- 该方法返回的 List 与传入数组是映射关系(视图):set/get 操作直接作用于数组;直接修改数组,list 也会改变
替代方案:
// 方案一
// List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
Integer[] arr = {1, 2, 3};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
// 方案二
List<Integer> list = new ArrayList<>();
// Collections.addAll(list, 1, 2, 3);
Integer[] arr = {1, 2, 3};
Collections.addAll(list, arr);
// 方案三(需 JDK8)
// List<Integer> list = Arrays.stream(new Integer[]{1, 2, 3}).collect(Collectors.toList());
int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
// 方案四(需 Guava)
// List<Integer> list = Lists.newArrayList(1, 2, 3);
int[] arr = {1, 2, 3};
List<Integer> list = Lists.newArrayList(Ints.asList(arr));