使用 Arrays.asList() 初始化列表的最佳方法是啥[重复]

Posted

技术标签:

【中文标题】使用 Arrays.asList() 初始化列表的最佳方法是啥[重复]【英文标题】:What is the best way of using Arrays.asList() to initialize a List [duplicate]使用 Arrays.asList() 初始化列表的最佳方法是什么[重复] 【发布时间】:2013-12-30 14:10:40 【问题描述】:

我使用下面的代码。两者都在我的应用程序中运行良好。

案例 1。

List<String> coreModules =
    new ArrayList<String>(Arrays.asList(
        "TOOLBAR_TO_DO_LIST",
        "TOOLBAR_PROPERTY",
        "TOOLBAR_PEOPLE",
        "TOOLBAR_INSURANCE",
        "TOOLBAR_BATCH",
        "TOOLBAR_INFORMATION_REFERENCE",
        "TOOLBAR_LR_PROPERTY",
        "TOOLBAR_CASE_FOLDER",
        "TOOLBAR_INSPECTION_RESULT",
        "TOOLBAR_MY_OFFICE"));

案例 2。

List<String> coreModules =
    Arrays.asList(
        "TOOLBAR_TO_DO_LIST",
        "TOOLBAR_PROPERTY",
        "TOOLBAR_PEOPLE",
        "TOOLBAR_INSURANCE",
        "TOOLBAR_BATCH",
        "TOOLBAR_INFORMATION_REFERENCE",
        "TOOLBAR_LR_PROPERTY",
        "TOOLBAR_CASE_FOLDER",
        "TOOLBAR_INSPECTION_RESULT",
        "TOOLBAR_MY_OFFICE");

但我有一些问题:

    在性能方面哪个更好? 在哪种情况下更喜欢案例 2?

【问题讨论】:

看看这个:***.com/questions/16748030/arrays-aslistarray-in-java 【参考方案1】:

案例 2 在性能方面更好,但是:它返回一个大小不可变的列表。这意味着您不能向其中添加/删除元素:

返回一个由指定数组支持的固定大小列表。 (将返回的列表“写入”到数组的更改。)

Arrays#asList

【讨论】:

Javadoc 说(对于 Arrays.asList):Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.)。所以它不是一成不变的。 @Arnaud Denoyelle,尝试从列表中添加或删除一个元素,然后自己看看:) 您可以更改现有元素,但不能添加新元素。 不是完全不变的。它通过修改底层数组中的元素来支持set(int index, E element) 我没有说元素是不可变的......只是列表本身。您不能执行任何更改列表大小的操作。显然,它无法控制其底层元素的变化。你可以不使用 set(int index, E element) 改变一个元素,只需要改变它的引用。 @Lital 列表是不可变的当且仅当您不能添加/删除/ change 元素。在这种情况下,您可以使用set 方法更改元素,因此该列表不是不可变的。不可变列表的例子就是那个,你可以通过Collections.unmodifiableList【参考方案2】:

我认为案例 2 就像创建 new String[10]。您无法更改大小,但可以更改元素。案例 1 允许您两者都做。

这显示了您可以使用案例 2 做什么:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Arrays.java#Arrays.ArrayList

【讨论】:

以上是关于使用 Arrays.asList() 初始化列表的最佳方法是啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章

关于不可变列表(由 Arrays.asList() 创建)

使用Arrays.asList的优点和缺点

Java中使用Arrays.asList初始化ArrayList

Arrays.asList() vs Collections.singletonList()

List || Lists

Arrays.asList 使用细节