2016-11-15 45 views
1

在Java教程關於收集它指出:實施Collections.singleton作爲一個靜態工廠方法

Collections.singleton是返回一個只包含指定元素的不可變Set靜態工廠方法。

爲什麼Collections.singleton需要返回不可變?

+4

它不需要*,它被設計成不可變的。 – Andreas

+2

就設計決策而言,如果知道其中只有一個數據(沒有後備數組,它只是單個項目的一個字段),它確實允許您進行極其優化的設置。就像'emptySet'的實現可以有一個簡單的'contains'方法。 –

+2

如果它是可變的,你可以添加或刪除元素。這意味着它不是一個單身人士。 – shmosel

回答

2

我想你的問題是'爲什麼Collections.singleton方法(它們有三個用於列表,集合和映射)旨在返回一個不可變的集合?'

在這種情況下,單例只是一個元素的集合。因爲集合只有一個對象(即單例),所以集合是不可變的:方法的客戶端不應該能夠添加或從集合中移除,因爲這會破壞合同來存儲單個對象。

+0

你對「單身」一詞的邏輯根本不是真的。一個集合是一個單例,只要它有一個元素即可。正如你所暗示的,它與獨特性或單體反模式無關。 –

+0

好吧,我會編輯以清楚說明。 – sprinter