可能重複:
How to implement a Map with multiple keys?
Multiple Keys to Single Value Map JavaA和兩個鍵
我得基於兩個輸入字符串屬性的枚舉值。我一直在做這個地圖單值。現在我面臨着拼接。有沒有辦法讓地圖有兩個鍵,這樣我就可以
Map.get("attr1","attr2");
這將返回正確的枚舉。或者我只需要連接所有可能的值並將其用作關鍵字?
我在尋找的乾乾淨淨的解決方案(不是大家:P)
可能重複:
How to implement a Map with multiple keys?
Multiple Keys to Single Value Map JavaA和兩個鍵
我得基於兩個輸入字符串屬性的枚舉值。我一直在做這個地圖單值。現在我面臨着拼接。有沒有辦法讓地圖有兩個鍵,這樣我就可以
Map.get("attr1","attr2");
這將返回正確的枚舉。或者我只需要連接所有可能的值並將其用作關鍵字?
我在尋找的乾乾淨淨的解決方案(不是大家:P)
嗯,你可以使用Map<String, Map<String, YourEnum>>
。
我們使用了很多,因此做了我們自己的Map
實現,該實現提供了兩個鍵,並在內部使用map-of-maps方法。
在這種情況下,我會用這兩個屬性製作一個包裝類,實現equals()
,並可能實現Comparable
和compareTo
委託到組合鍵的兩個元素上。並將這個課程作爲地圖的關鍵。
它會像滾動你自己的Pair
類。看看這個問題的答案,那細說此事:What is the equivalent of the C++ Pair in Java?
你可以有地圖的地圖,即
Map.get("attr1").get("attr2");
或用equals方法,即
可以定義一個對象Map.get(new MyObject("attr1", "attr2"));
爲什麼不創建一個包含兩個鍵的類並將其用作映射鍵?
例如:
public class BiKey implements comparable<BiKey>
{
private String key1;
private String key2;
// getters and setters
// equals and hash code.
// implement comparable.
}
Map <BiKey, Blammy> blammyMap; // Blammy is the value type.
托馬斯的做法一樣,我們(在我的工作)有周圍幾個地圖的簡單包裝「三維」地圖類。
public class MultiKeyMap {
private HashMap<keyOne, Object> keyOneToObjectMap;
private HashMap<keyTwo, Object> keyTwoToObjectMap;
...etc
}
這是很容易保持所有的映射中彼此同步,並允許無噸的可能比較複雜的代碼體面快速搜索。 (然而,這是以提高內存的使用成本)
org.apache.commons.collections.map.MultiKeyMap是你想要的
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiKeyMap.html
例如
private MultiKeyMap cache = MultiKeyMap.decorate(new LRUMap(50));
public String getAirlineName(String code, String locale) {
String name = (String) cache.get(code, locale);
if (name == null) {
name = getAirlineNameFromDB(code, locale);
cache.put(code, locale, name);
}
return name;
}
檢查這個答案 http:// stackoverflow。COM /問題/ 822322 /如何對實現-A-MAP-與-多鍵 – Kent