2013-08-31 117 views
3

我最近發現可以通過調用Collections.nCopies()方法而不是使用for-loop來初始化Java中的List。但是這讓我想到,在for循環中使用這種方法會有性能優勢還是劣勢,還是隻是做同樣事情的一種更簡單的方法?Collections.nCopies()與For循環初始化

+0

您是否嘗試過測試? –

回答

6

由於nCopies返回的集合是不可變的,因此此集合中的條目不需要「物化」。換句話說,所需要的只是一個T類型的單個對象的空間;其他一切都是僞裝爲具有N對象集合的集合接口的實現,但實際上只有一個對象返回N次。

當您創建的集合很大時,這可能會證明您可以在空間上獲得很大改善:實際上,集合越大,與通過for環路初始化的真實集合相比,您的儲蓄就越大。

+0

+1 - 爲了完整性,值得注意的是,Java 6和Java 7 *中的nCopies方法的行爲(我檢查了代碼),並且沒有理由期望爲未來的版本進行更改。 –

+0

因爲它返回一個不可變的集合,是否會影響ArrayList的add()方法? –

+0

@OmarAbdeldayem是的,你會得到一個'RuntimeException'肯定是一個'UnsupportedOperationException' – nachokk

0

當您使用nCopies()作爲List構造函數的參數時,不變性不是問題:構造函數創建一個不可變的副本。