2011-03-08 91 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()方法,但对于常见的实现通过所有值这只是在内部进行迭代,并且他们比作参数。