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

时间:2016-05-03 19:49:52

标签: java list

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

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

documentation并未解释其背后的原因:

  

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

1 个答案:

答案 0 :(得分:20)

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

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

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