2016-05-03 61 views
5

Arrays.asList是一個有用的和方便的方法,但它返回一個List其大小是固定的,使得沒有任何元素可加入或與addremoveUnsupportedOperationException拋出)除去。爲什麼Arrays.asList返回一個固定大小的List?

有沒有很好的理由呢?這對我來說看起來是一個很奇怪的限制。

documentation不說明理由背後:

返回由指定數組支持的固定大小的列表。

+2

創建另一個列表,例如'新的ArrayList(asList(...))'或'新的LinkedList(asList(...))' – kan

+0

文檔確實說它返回「指定數組的列表視圖」,所以它應該是有意義的-尺寸。 – manouti

回答

13

的要點是,Arrays.asList正在返回陣列的視圖,以及向所述陣列的變化反映在List,反之亦然。它不是複製,它只是一個非常簡單的List接口實現,它將指定數組解釋爲List。因此,Arrays.asList實際上只是反映出Java陣列也是固定大小的。您無法從後備陣列中添加或移除元素。

正如在評論中提到的,從數組中獲取一個可變大小的列表是很容易的,例如, new ArrayList<>(Arrays.asList(array))

此外,它的價值是:番石榴實際上regrets發現大多數使用它的人真的想要一個不變的列表後,提供了一個「可變參數參數可調整列表」方法。

相關問題