我一直想知道從java.util的地圖。來自Java的地圖接口問題
爲什麼values()方法返回一個Collection,而keySet和entrySet返回一個Set?
Set和Collection的優點和缺點是什麼?
我一直想知道從java.util的地圖。來自Java的地圖接口問題
爲什麼values()方法返回一個Collection,而keySet和entrySet返回一個Set?
Set和Collection的優點和缺點是什麼?
一套保證定條目只能一次存在。一個集合不。由於一個Map沒有值的唯一性保證,它們的集合根本不是一個集合,但必須是一個集合。
準確地說 - 雖然鍵的集合和條目集合不能有重複,因此可以聲明爲Set。 – 2011-01-05 16:01:46
地圖內部管理密鑰集,因爲鍵是唯一值不
返回包含在此映射中鍵的Set視圖。該集合由地圖支持,因此對地圖的更改反映在集合中,反之亦然。如果在對集合進行迭代的過程中修改了映射(除了通過迭代器自己的刪除操作),迭代的結果是未定義的。該集支持元素刪除,通過Iterator.remove,Set.remove,removeAll,retainAll和clear操作從映射中刪除相應的映射。它不支持add或addAll操作。
請參見
A Set
是不包含重複元素的Collection
。在可能的情況下返回Set
的好處是可以明確地保證唯一性。
正如其他人指出的,values()
無法返回Set,因爲值的集合可能包含重複項。
這不是一個真正的優勢和劣勢問題 - 這是map的關鍵,值和條目代表的重要性。
鍵在地圖上是獨一無二的
在Map
的關鍵是獨特的 - 也就是說,有不會是在Map
重複鍵。 A Collection
確保重複不存在是Set
。
因此,通過keySet
方法將密鑰作爲Set
返回。
值在地圖不一定是唯一
在另一方面,Map
的values不必是唯一的。
例如,我們可以有與關鍵"fruit"
地圖的價值"apple"
映射中的項,並且還具有與關鍵"computer"
映射另一個入口的價值"apple"
:
map {
key:"fruit" -> value:"apple"
key:"computer" -> value:"apple"
}
具有重複的值一張地圖是允許的。
因此,我們不能使用Set
,因爲這需要所有條目都是唯一的。 Map
的值的一個很好的選擇是返回一個普通的舊Collection
,因爲它不會對值的內容施加任何限制。
條目中的地圖也很獨特
的Map
的條目是獨特 - 它們是鍵和值,由Map.Entry
對象表示的組合。由於此鍵值對是唯一的,因此通過entrySet
方法將其作爲Set
返回。
進一步閱讀
值()可以是複製,所以它是Collection
。
keySet()和entrySet()不能重複,因此它們是Set
。
ps:Set
是非重複的Collection
。
如果Java有'Bag'類型,這在這裏更合適。 – skaffman 2011-01-05 16:02:13