可能重複:
Any implementation of Map<K1, K2, V>, i.e. two keys?雙查找地圖
我需要存儲的名稱和ID鍵值對。不過,在我的程序中,有時我需要用名字和id來查找。我不想創建兩個HashMap(或通過存儲名稱id和id名稱對來消耗內存兩倍)
什麼是適合它的數據結構? java中有這樣的標準實現嗎?
可能重複:
Any implementation of Map<K1, K2, V>, i.e. two keys?雙查找地圖
我需要存儲的名稱和ID鍵值對。不過,在我的程序中,有時我需要用名字和id來查找。我不想創建兩個HashMap(或通過存儲名稱id和id名稱對來消耗內存兩倍)
什麼是適合它的數據結構? java中有這樣的標準實現嗎?
您也可以番石榴的BiMap使用。並獲得逆映射很簡單,只要:
BiMap<Integer, String> biMap = HashBiMap.create();
biMap.put(1, "a");
biMap.put(2, "b");
BiMap<String, Integer> invertedMap = biMap.inverse(); //to get the name,id map
唯一的限制就是你的鍵和值應該是唯一的。
番石榴HashBiMap
它記錄了你映射的兩個方向。目前,它的實現基本上只是在每個方向上維護一個HashMap
,但下一個版本將使用自定義數據結構,在內存上節省約38%。
本質上,HashBiMap
的行爲與Map
的行爲完全相同,只不過它拒絕重複的值,您可以通過調用inverse()
來獲得另一個方向的視圖 - 鍵的值。
(披露:我貢獻番石榴)
番石榴有這個。 – bmargulies
你想通過id查找名稱,也可以按名稱查找id嗎?那麼,查找是雙向的?不是說你有兩個實際的鍵,對於第三個值? –
不清楚您是需要雙向地圖還是帶有多個鍵的地圖。 –