为什么Arrays.asList返回固定大小的List?

Mal*_*jam 11 java list

Arrays.asList是一个有用且方便的方法,但它返回一个List大小固定的方法,这样就不会添加或删除任何元素addremove(UnsupportedOperationException抛出).

这有充分的理由吗?这看起来像是一个奇怪的限制.

文件没有解释背后的原因:

返回由指定数组支持的固定大小的列表.

Lou*_*man 21

关键在于Arrays.asList返回数组的视图,并且对数组的更改将反映在数组中List,反之亦然.它不是一个副本,它只是一个非常简单的List接口实现,它将指定的数组解释为List.因此,Arrays.asList实际上只是反映Java数组也是固定大小的.您也无法在支持数组中添加或删除元素.

正如评论中所提到的,从数组中获取可变大小的列表非常容易new ArrayList<>(Arrays.asList(array)).

另外,对于它的价值:Guava实际上后悔在发现大多数使用它的人确实想要一个不可变列表之后提供"来自varargs参数的可调整大小的列表"方法.