2012-10-26 40 views
1

基於實現HashMap,我得到了一個測試驅動的開發問題(我需要使它基於提供的junit方法工作)使用鍵的字符串和ArrayLists的值。關鍵需要能夠支持一個或多個相應的值。我需要設置我的方法,以便可以從散列中增加或減少值,然後查看散列的更新內容。我的努力是從下面顯示的單元方法(執行myClass和它的addingMethod方法)中獲取信息並將它正確地放入哈希中。HashMap <String,ArrayList>,使用基於密鑰的新值追加ArrayList

void add() { 
    myClass = new MyClass("key1", "value1"); 
    myClass.addingMethod("blargh", "blarghvalue"); 
    myClass.addingMethod("blargh2", "uglystring"); 
    myClass.addingMethod("blargh", "anotherstring"); 
    //and so on and so on............ 

對於我的最終結果是,當我打印出來myClass的結果,我需要看的東西,如: {blargh = [blarghvalue,anotherstring],blargh2 = uglystring}

我需要能夠添加到此,並刪除值。

我很新的java收藏(顯然)。如果他們只有1對1關係,並且散列映射爲1:1,我可以使事情發揮作用。所以有一個非常簡單的addingMethod這樣的:

public void addingMethod(String key, String value) { 
    hashMap.put(key, value); 

會得到一串字符串HashMap的,當然,如果我再與新的鍵值對的鍵,原來的鍵值就會被踩踏而消失。當談到動態處理hashmaps和arraylists時,除了1:1的關鍵:價值關係之外,我迷了路。

回答

3

這聽起來像你需要一個MultiMap,這是谷歌的巨大Guava libraries提供:

類似於Map的集合,但可以將多個值與單個鍵關聯。如果使用相同的鍵但不同的值調用put(K,V)兩次,則multimap包含鍵與兩個值的映射。

+1

爲什麼人們不斷鏈接到番石榴版本3的文檔?我們現在13歲了。 –

+0

@LouisWasserman:因爲他們是第一個用google搜索例如'Java Guava Multimap'的命中,所以很容易錯過。 – Keppil

+0

讓我說,作爲一名java總新手,這是一個很棒的發現(儘管肯定會給所有的獸醫一個給定的)。非常感謝你,我只是保存了幾行代碼而且很頭痛。雖然我想弄清楚實現它的'其他'方法,以加強我的Java基礎。 – Benny

2

你需要的是Map<String, List<String>>和裏面檢查,如果條目存在,如果是的話添加到列表。

聲明你的地圖就像下面

Map<String, List<String>> map = new HashMap<String, List<String>>(); 

注意的adding Method語法應爲相同put

public List<String> put(String key, String value) { 
    if (!map.containsKey(key)) { 
     return map.put(key, new ArrayList<String>()); 
    } 
    List<String> list = map.get(key); 
    list.add(value); 
    return map.put(key, list); 
} 
+0

這太棒了,但是如何打印呢? –

相關問題