【发布时间】:2017-08-28 11:08:51
【问题描述】:
参考Difference between Arrays.asList(array) vs new ArrayList<Integer>(Arrays.asList(ia)) in java
我很好奇Arrays.asList() 方法的确切目的是什么。
当我们从中创建一个新的List 时,比如说 -
Integer[] I = new Integer[] { new Integer(1), new Integer(2), new Integer(3) };
List<Integer> list1 = Arrays.asList(I);
List<Integer> list2 = ((List<Integer>) Arrays.asList(I));
我们无法对其执行大多数常规操作,例如.add()、.remove()。因此,我无法为其添加迭代器以避免concurrent modification。
Oracle 文档状态
public static List asList(T...a)
返回由指定数组支持的固定大小的列表。 (更改为 返回的列表“写入”到数组。)此方法充当 结合基于数组和基于集合的 API 之间的桥梁 使用 Collection.toArray()。返回的列表是可序列化的,并且 实现 RandomAccess。
它适用于创建一个新的List。 List<Integer> list3 = new ArrayList<>(Arrays.asList(I));
那么,为什么会这样,它的优点和缺点是什么?
【问题讨论】:
-
一个是数组的
List视图。另一种是将数组复制到完全独立的List中。你在比较apples and oranges。 -
这是获取列表的最短途径。
Arrays.asList("Alpha", "Beta")。它由您提供的数组明确支持 - 如果您需要,您可以使用它来实际修改数组。 -
如果您已经拥有
Integer[],那么 Arrays.asList 和 ArrayList 之间可能没有太大区别(当然,除非您需要 ArrayList 的功能)。但如果你不这样做,那么List<Integer> list1 = Arrays.asList(1, 2, 3)就很方便了。 -
这对于在一行中创建和填充列表很有用。
private static final List<String> VALID_INPUTS = Arrays.asList("Cat","Dog","Mouse");
标签: java arrays list arraylist