使用 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() 初始化列表的最佳方法是啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java中使用Arrays.asList初始化ArrayList