查找HashMap是否包含所选值和返回键

时间:2011-03-08 09:25:48

标签: java

有没有办法找出我的HashMap<String, String>是否包含值=“x”的条目(键,值)并按顺序遍历所有条目?

6 个答案:

答案 0 :(得分:8)

HashMap.containsKey()

首先是HashMap 制作的内容......

(不确定“按顺序浏览所有条目”是什么意思。每个键只有1个条目。)


编辑:

现在您编辑了问题,答案是! :(

如果您需要该功能,请设计您自己的双向HashMap,将每个值的位置存储在另一个值中(希望这是有意义的),然后使用该类。 HashMap不适用于此。

答案 1 :(得分:4)

containsValue()方法,但对于常见的实现,这只是在内部迭代所有值并将它们与参数进行比较。

答案 2 :(得分:1)

常见的模式是使用

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

}

但是,如果您知道这些值都不是null(许多Map集合不允许为null),那么您可以执行以下更有效的操作。

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

}

BTW:containsKey与

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

答案 3 :(得分:0)

使用HashMap.containsKey()来知道它是否包含给定的密钥。 使用HashMap.keySet()或HashMap.entrySet()来检索条目或值的集合,并按顺序迭代它。

答案 4 :(得分: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
  }
}

正如其他一些答案中所建议的那样,您可能会考虑为您要解决的问题找到更好的数据结构。

答案 5 :(得分:0)

您可能想考虑使用双向地图,例如Google的Guava库中的地图:http://guava-libraries.googlecode.com/svn/trunk/javadoc/index.html?com/google/common/collect/BiMap.html