2012-09-10 39 views
2

我想在1個鍵中存儲3個值。 一個Hashmap只能容納1個key,1個值,所以不能使用。 那麼,我還需要從價值A/B/C的一個關鍵中獲得哪些其他方法。如何使用一個鍵存儲多個值

關鍵:字符串

值:字符串/字符串/ INT

+1

也有(非標準API)Multimap之實現。(不,我在這裏推薦的是由於失去了打字記錄的事,但保持心) – 2012-09-10 19:41:03

+0

我真的很新的哈希地圖/地圖/列表。所以很難理解你所討論的解決方案。我試着去理解和體會這個例子。但我不能得到解決方案。所以如果有一個完整的工作示例。我可以從中學習,並從那裏工作。 – user1621988

回答

11

創建一個對象來保存3個值,然後新對象就是您在Key-value對中的值。

下面是一個簡單的實現:

class TripleValue { 
    String A; 
    String B; 
    int C; 

    public TripleValue(String a, String b, int c) { 
     A = a; 
     B = b; 
     C = c; 
    } 
} 

public static void main() { 
    Map<String, TripleValue> myMap = new HashMap<String, TripleValue>(); 
    myMap.put("SomeKey", new TripleValue("String1", "String2", 10)); 

} 
+2

例如'class Triple {String A;字符串B; int C; }' – oldrinb

+1

如果值列表是動態的,則此解決方案可能不夠優雅。 – kosa

+3

@Nambari True,但OP將值列爲String/String/int –

5

其中一個方式可以是兼用的ArrayList /設定爲鍵值。

例子:

List myTempList = new ArrayList(); 
myTempList.add("Hi"); 
myTempList.add("Hello"); 
myTempList.add("How are you"); 

myMap.key("key", myTempList); 

另一種方法是,如果你知道這個編號爲每個鍵的值總是將是相同的,那麼你可以創建一個holder對象並設置值,該對象,並把它在地圖上。

+0

使用總是包含3個元素的異構'List'可能不是一個好主意。 – oldrinb

+0

@oldrinb:是的,我的理解是價值不是預定義的,如果他們是我同意你的說法。用另一個可能的解決方案更新答案 – kosa

0

嘗試

Map<Integer, List<yourObject>> m = new HashMap<>(); 

然後,你將需要檢查的列表是本作的關鍵。如果是的話添加到列表中。否則,創建一個ArrayList,並將其添加

例如:

public add(String key, MyObj myobj){ 
    if (this.contains(key)) { 
     this.get(key).add(myObj); 
    }else { 
     List<MyObject> list = new ArrayList<MyObject>(); 
     list.add(myObj); 
     m.put(key, list); 
    } 
} 
+0

您在'm'聲明的類型後缺少'>'。此外,從Java 7開始,您可以允許編譯器推斷創建的'HashMap'的參數化類型,即'new HashMap <>()' – oldrinb

+0

yes good point @oldrib。我總是忘記鑽石操作員! – RNJ

+0

@oldrinb你的意思是:「推斷創建的'HashMap'的參數化類型」 - 使用此功能的代碼看起來像什麼? – yoshi

0

的Java框架不支持Multimap,有辦法解決它,見下文。

Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>(); 

也看看這個庫Guava-libraries

相關問題