Arrays.asList
是一种实用且方便的方法,但它会返回一个大小固定的List
,这样就无法使用add
或remove
添加或删除任何元素(UnsupportedOperationException
被抛出)。
有充分的理由吗?这看起来像是一个奇怪的限制。
documentation并未解释其背后的原因:
返回由指定数组支持的固定大小的列表。
答案 0 :(得分:20)
关键是Arrays.asList
正在返回数组的视图,对数组的更改将反映在List
中,反之亦然。它不是一个副本,它只是List
接口的一个非常简单的实现,它将指定的数组解释为List
。因此,Arrays.asList
实际上只是反映了Java数组也是固定大小的。您也无法在支持数组中添加或删除元素。
正如评论中所提到的,从数组中获取可变大小的列表非常容易。 new ArrayList<>(Arrays.asList(array))
。
另外,对于它的价值:Guava实际上regrets在发现大多数使用它的人确实想要一个不可变列表之后提供了一个“来自varargs arguments的可调整大小的列表”方法。