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

Sit*_*nsu 23 java arrays collections list arraylist

我使用下面的代码.两者都在我的应用程序中工作正常.

情况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"));
Run Code Online (Sandbox Code Playgroud)

案例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");
Run Code Online (Sandbox Code Playgroud)

但我有一些问题:

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

Lit*_*log 41

情况2在性能方面更好但是:它返回一个具有不可变大小的List.这意味着您无法在其中添加/删除元素:

返回由指定数组支持的固定大小的列表.(对返回列表的更改"直写"到数组.)

Arrays#asList

  • 不是一成不变的.它通过修改底层数组中的元素来支持`set(int index,E element)`. (9认同)
  • @Arnaud Denoyelle,尝试在列表中添加或删除元素并自己查看:)您可以更改现有元素但不添加新元素. (3认同)
  • Javadoc说(对于Arrays.asList):`返回由指定数组支持的固定大小的列表.(对返回列表的更改"直写"到数组.)`.所以它不是一成不变的. (2认同)
  • @Lital列表是不可变的,当且仅当你不能添加/删除/*change*元素时.在这种情况下,您只需使用`set`方法_can_更改元素,因此该列表不是不可变的.不可变列表的示例是一个,您可以通过`Collections.unmodifiableList`获取它 (2认同)