2010-03-03 68 views
5

Google的決定是否類似於SortedMultiSet(stackoverflow question) 的決定還是因爲沒有使用MultiKeyMap爲什麼Google集合不像Apache集合那樣支持MultiKeyMap?

我知道用於MultiKeyMap替代可以使用自定義類作爲其含有多個鍵作爲其類成員的密鑰。相反,我喜歡在調用MultiKeyMap的get時指定多個鍵的概念。

Apache的版本MultiKeyMap是偉大的,但我嚴重缺失的仿製藥,因此看着谷歌集合爲一體的現代化實現它。如果有人知道Google爲什麼還沒有支持它,或者有更好的選擇,請回復。

回答

6

我們有一個非常好的雙層地圖實現,我們稱之爲「表」(K1是「行鍵」,K2是「列鍵」),我們只是沒有得到它尚未發佈。但是,過去兩個關鍵是收益遞減。

+2

偉大的,有谷歌官方收集傢伙響應:) 我能有一個告密者峯頂到這個 '表' 的數據結構? 爲什麼不有3層和4層地圖? – 2010-03-04 00:01:41

+0

@ kevin-bourrillion這張2層地圖已經發布了嗎? – Cat 2014-06-01 04:14:44

+0

是的,因爲這裏最高的答案指出。我的答案應該是不被接受的。 – 2014-11-02 16:48:24

2

我認爲仿製藥可能是執行攪局者在這裏。如果您只查看Map接口,則有關鍵類型(K)和值類型(V)的通用說明符。我不認爲可以很容易地使用泛型來指定它,而不必將實現分成多個類(每個關鍵組件一個)。

您需要爲每一個類:

MultiKeyMap2<K1,K2,V> 
MultiKeyMap3<K1,K2,K3,V> 
MultiKeyMap4<K1,K2,K3,K4,V> 
MultiKeyMap5<K1,K2,K3,K4,K5,V> 

底層的實現基本上是做你的建議是什麼(使用自定義類)。但是,它並沒有正式爲它創建一個類,所有內容都是內聯的。這實際上是一個實現細節。但是,使用谷歌收集的自定義類來執行同樣的事情會很多的操作方式相同,我一定要實現的hashCode()和equals()。

9

僅供參考,公認的答案在2010年3月被回答,但截至2010年9番石榴包括Table

+0

您可以使用您在此處提供的更新信息編輯接受的答案嗎? – 2016-05-18 05:18:18

+0

@MonisIqbal你不應該那樣做。這裏是[Meta上關於這個主題的許多帖子](http://meta.stackoverflow.com/a/320293/1768232)。如果你不喜歡接受的答案,請降低它。如果你喜歡我的,趕快行動吧,這就是按鈕的用途。但是,您不應該完全編輯內容 - 編輯其他人的答案,編輯功能是針對不改變內容的改進。 – durron597 2016-05-19 17:50:28