2012-01-24 170 views
1

我是Java的新手。我實現了一個哈希表,如下所示。 在特定場景中,我想使用密鑰的值檢索密鑰。 例如:如果用戶輸入「Dravid」,那麼我需要從哈希映射中檢索「2」。從哈希映射中檢索密鑰

而我只想使用一個哈希映射來實現這一點。

任何人都可以幫助我嗎?

HashMap<String,String> streetno=new HashMap<String,String>(); 
    streetno.put("1", "Sachin"); 
    streetno.put("2", "Dravid"); 
    streetno.put("3","Sehwag"); 
    streetno.put("4", "Laxman"); 
    streetno.put("5", "Kohli"); 
+2

你可能想看到這個[鏈接](http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value)第一。也許這將有助於解決您的問題。 – Frankline

+1

這不是一個常用的地圖,所以你應該重新考慮你的方法:也許你需要交換你的鍵和值,所以鍵將是值,值將是鍵。 – Egor

回答

1

要做到這一點,你需要使用一個雙向HashMap中。考慮使用Apache Commons implementation

沒有它,你需要迭代地圖中的所有鍵/值對,並測試值何時等於「Dravid」,然後返回鍵。像這樣:

for (Entry<String, String> pair : streetno.entrySet()) { 
     if (pair.getValue().equals("Dravid")) { 
     System.out.println("Found Dravid at key: " + pair.getKey()); 
     } 
    } 
3

短版,所以有東西要實現留給你:

遍歷地圖的所有條目,並搜索字符串比較的項的值。如果匹配,則返回密鑰。

+0

是的..你能告訴我哪些函數需要用來迭代地圖的所有條目並比較字符串嗎? –

+0

它被稱爲Map.entrySet()。 –

2

對於標準的HashMap,您可以執行的唯一操作是遍歷地圖的條目,直到找到具有您正在查找的值的值,然後返回該值的關鍵值。

HashMap是爲了快速有效地查找值,如果你知道的關鍵,但不是相反的方式。有一些圖書館有地圖,可以讓你通過按鍵以及其他方式來查找價值。例如Google Guava有一個支持這個的BiMap

利用番石榴的HashBiMap,你可以這樣做:

BiMap<String, String> map = HashBiMap.create(); 
map.put("1", "Sachin"); 
map.put("2", "Dravid"); 
map.put("3", "Sehwag"); 
map.put("4", "Laxman"); 
map.put("5", "Kohli"); 

String key = map.inverse().get("Dravid"); 
1

你可以做任何上述的答案,它也更好地添加此檢查前,繼續到實際的邏輯。

if(streetno.containsValue("Dravid")){ 
    // do logic 
} 
else 
System.out.println("Not found");