2011-03-08 90 views
4

有什麼方法可以查找我的HashMap<String, String>是否包含value =「x」的條目(鍵值)並按順序遍歷所有條目?查找HashMap是否包含選定的值並返回鍵值

+1

請首先看看地圖界面 – 2011-03-08 09:29:14

+2

如果您將問題改爲意思相反,那麼您應該在提及的問題中提到,或者所有現有的答案都會顯得很不合適。 – 2011-03-08 09:40:58

+0

[可能的複製:給定的詳細說明] [1] [1]:http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value – cryptickp 2013-07-30 16:12:58

回答

8

HashMap.containsKey()

這是HashMap在首位取得 ...

(不知道你的「要經過的所有條目順序」的意思,不過,這裏只有1每個鍵進入)


編輯:

現在你編輯這個問題,答案是沒有! :(

如果你需要的功能,設計出存儲在其它的值(即是有道理的希望)每個值的位置,自己的雙向HashMap,然後使用類。HashMap s的不適合這一點。

0

使用HashMap.containsKey()知道,如果它包含一個給定的關鍵。 使用HashMap.keySet()或HashMap.entrySet()中檢索條目或值的集合,並在其上依次遍歷。

1

常用模式是使用

if(hashMap.containsKey(key)) { 
    Object o = hashMap.get(key); 

} 

但是,如果您知道任何值都不是null(許多地圖集合不允許爲null),則可以執行以下更高效的操作。

Object o = hashMap.get(key); 
if (o != null) { 

} 

BTW:containsKey方法是一樣的

Set<Key> keys = hashMap.keySet(); 
boolean containsKey = keys.contains(key); 
+0

呃...''包含'在'HashMap'上?那個新的... – Mehrdad 2011-03-08 09:41:53

+0

@Mehrdad,你是對的,它的containsKey,與Set混淆。 ;) – 2011-03-08 09:59:10

0

你可以找到你正在尋找的信息,但它會是低效:

Object key; 
Object val; 
HashMap hm = new HashMap(); 
for (Iterator iter = hm.entrySet().iterator(); iter.hasNext();) { 
    Map.Entry e = (Map.Entry) iter.next(); 
    if (key.equals(e.getKey()) && val.equals(e.getValue())) { 
    // do something 
    } 
} 

正如一些建議其他答案,你可能會考慮一個更好的數據結構來解決你正在試圖解決的問題。

4

還有就是containsValue()方法,但對於常見的實現通過所有值這只是在內部進行迭代,並且他們比作參數。