2012-03-12 99 views
1

我對Java的HashMap的兩個問題:哈希多圖問題

1)是否有可能在Java中的HashMap的任何實施得到的值對應的密鑰?我正在使用HashMultiMap(鍵 - )多個值)。

2)是否有可能在Java HashMap的任何實現中獲取HashMap中的Key位置?如果是這樣,那麼如果我添加新的密鑰,鑰匙位置是否有可能改變?我正在使用HashMultiMap(鍵 - )多個值)。

如果他們兩個都回答不是,怎麼可能手動實現(任何想法?)?

+1

你是什麼意思的「在地圖上的位置」?地圖不是可轉位的,所以這並不意味着什麼。 – 2012-03-12 08:42:59

+0

@JoachimSauer,我在一些web文檔中發現,通過使用其他一些像HashMap這樣的結構是可能的,但不是很清楚。這就是爲什麼,我問。 – Arpssss 2012-03-12 08:48:09

+1

你想通過獲得職位來解決什麼問題?你爲什麼在乎*? – 2012-03-12 08:52:41

回答

6

1)是的,但效率不高,界面Map中沒有任何方法可以通過一個方法調用完成。你必須遍歷地圖的條目,直到找到你正在查找的值;那麼你有相應的條目的關鍵。有實施例如Google Guava'sBiMap,這可以讓你有效地進行反向查找。

2)不,因爲地圖不是有序的集合:鍵在地圖中沒有定義的位置。如果你需要這個,你可以使用例如LinkedHashMap,它保持鍵值對在地圖中插入的順序。

+0

非常感謝。但是,HashMultiMap(具有多個值的鍵)也可能嗎? – Arpssss 2012-03-12 08:52:14

+0

我在這裏找到了(http://www.javacodegeeks.com/2011/09/google-guava-libraries-essentials.html)BitMap示例,其中只有具有Single值的鍵。這也可能是Key with Multiple value嗎? – Arpssss 2012-03-12 09:01:34

+2

據我所知,Guava中既沒有現成的實現,也沒有'BiMap'和'Multimap',所以你必須自己編寫一個查找方法。 – Jesper 2012-03-12 12:07:43