【问题标题】:Benefits of creating a List using Arrays.asList() [duplicate]使用 Arrays.asList() 创建列表的好处 [重复]
【发布时间】: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。

它适用于创建一个新的ListList&lt;Integer&gt; list3 = new ArrayList&lt;&gt;(Arrays.asList(I));

那么,为什么会这样,它的优点和缺点是什么?

【问题讨论】:

  • 一个是数组的List 视图。另一种是将数组复制到完全独立的List 中。你在比较apples and oranges
  • 这是获取列表的最短途径。 Arrays.asList("Alpha", "Beta")。它由您提供的数组明确支持 - 如果您需要,您可以使用它来实际修改数组。
  • 如果您已经拥有Integer[],那么 Arrays.asList 和 ArrayList 之间可能没有太大区别(当然,除非您需要 ArrayList 的功能)。但如果你不这样做,那么List&lt;Integer&gt; list1 = Arrays.asList(1, 2, 3) 就很方便了。
  • 这对于在一行中创建和填充列表很有用。 private static final List&lt;String&gt; VALID_INPUTS = Arrays.asList("Cat","Dog","Mouse");

标签: java arrays list arraylist


【解决方案1】:

不能调用 add、remove 等是确切的区别。如果您不需要这些方法,Arrays.asList 可以为您提供将数组作为 List 的完美视图(对于采用集合而不是数组的 API)。如果您需要更改列表的“形状”,那么 new ArrayList(Arrays.asList(myArray)) 就是要走的路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2018-07-18
    • 2014-10-16
    • 2014-02-16
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多