2011-02-17 62 views
1

我有一個任務,這是我的HashMap初始化..我只能使用標準的JAVA API。如何創建一個方法來獲取值的一個值(字符串)在一個散列圖

private static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>(); 

是否有可能得到一個指定的值的關鍵說信息getKey(HMAP,「今天」),它會返回在那裏今天所處的關鍵..

ASLO有沒有辦法讓在我的HashSet中的一個鍵的最後一個值?

任何幫助表示讚賞謝謝!

+1

如果多個鍵映射到相同的值,getKey的預期行爲是什麼?你似乎隱含地認爲映射是內射的(或一對一)。 – 2011-02-17 20:28:39

+0

從你的問題和你的一些評論來看,你似乎在尋求許多不同的東西。組織你的想法,並在你的問題更具體。 – Jeremy 2011-02-17 21:05:04

回答

1

但實際上,你可以擁有它有「今天」不止一個按鍵。所以我返回List.toString與鍵

private static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>(); 

public static String getKey(Map<String, HashSet<String>> map, String value) { 
    List<String> returnKey = new ArrayList<String>(); 

    for (String s : map.keySet()) { 
     if (map.get(s).contains(value)) { 
      returnKey.add(s); 
     } 
    } 

    return returnKey.toString(); 

} 

public static void main(String[] args) { 
    // put sth to hMap 
    System.out.println(getKey(hMap, "today")); 
} 
0

你真正想要的是Google's Guava BiMap

bimap(或「雙向映射」)是一個映射,它保留了它的值以及它的值的唯一性。這個約束使得bimaps支持「反向視圖」,這是另一個bimap包含與這個bimap相同的條目,但是具有相反的鍵和值。

如果你不能使用它,那麼你將不得不循環瀏覽地圖條目,尋找不太快的匹配。

+0

我不允許使用外部圖書館:( – xiaolin 2011-02-17 20:15:02

0

儘可能一般地只有一個Map

public static <K,V> K getKey(Map<K,V> map,V val){ 
    for(Map.Entry<K,V> entry:map.entrySet()){ 
     if(entry.getValue().equals(val)){ 
      return entry.getKey(); 
     } 
    } 
    return null; 
} 

這將只返回匹配的第一個值的關鍵。如果你想返回一個特定值的所有密鑰,那麼你可以修改這個方法來將它們的密鑰累加到List中,然後返回。

(不要讓你的希望爭取早日恢復...)

相關問題