Arrays.asList() vs Collections.singletonList()

2022-08-31 06:59:29

使用Arrays.asList(something)而不是Collections.singletonList(something)来制作包含一个项目的列表是否有优势(或很大的区别)?后者也使返回的列表不可变。


答案 1

Collections.singletonList(something)是不可变的,而 是数组的固定大小表示形式,其中列表和数组在堆中联接。Arrays.asList(something)List

Arrays.asList(something)允许对它进行非结构更改,这些更改将同时反映在 List 和连体数组中。它抛出不受支持的操作Exception来添加,删除元素,尽管您可以为特定索引设置元素。

对 返回的列表所做的任何更改都将导致“不支持的操作异常”。Collections.singletonList(something)

此外,返回的 List 的容量将始终为 1,这与其容量为支持的阵列的大小不同。Collections.singletonList(something)Arrays.asList(something)


答案 2

我只想补充一点,单例列表没有数组的支持,只有对该项的引用。据推测,它将占用更少的内存,并且可能很重要,具体取决于要创建的列表的数量。