使用Arrays.asList()初始化List的最佳方式是什么?

24
我使用以下代码。在我的应用程序中,两个都可以正常工作。
情况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"));

第二种情况。

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");

但我有一些问题:

  1. 从性能方面来看,哪种更好?
  2. 在哪种情况下会更喜欢第二种情况?

5
看这个:https://dev59.com/qGQn5IYBdhLWcg3wiXqd - Lukas Warsitz
2个回答

42
案例2在性能方面更好,但是:它返回一个大小不可变的列表。这意味着您无法向其中添加/删除元素:
返回由指定数组支持的固定大小列表。(对返回的列表所做的更改“写入”到数组中。) Arrays#asList

3
Javadoc 对 Arrays.asList 的解释是:返回由指定数组支持的固定大小列表。(返回列表的更改会“写入”到数组中)。因此它不是不可变的。 - Arnaud Denoyelle
3
尝试向列表中添加或删除一个元素并亲自查看,您可以更改现有元素,但不能添加新元素。 - Lital Kolog
10
不完全是不变的。它通过修改基础数组中的元素来支持set(int index, E element) - Patricia Shanahan
1
我并没有说元素是不可变的...只是列表本身是不可变的。您不能执行任何改变列表大小的操作。显然,它无法控制其基础元素的更改。您可以通过更改其引用而无需使用set(int index, E element)来更改元素。 - Lital Kolog
3
如果你不能添加/删除/ 更改 元素,则列表是不可变的。在这种情况下,你可以使用set方法更改元素,因此此列表不是不可变的。不可变列表的示例是通过Collections.unmodifiableList获取的列表。 - Dmitry Ginzburg
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接