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

有没有办法找到我的HashMap包含值为“x”的条目(键,值)并按顺序遍历所有条目?

HashMap.containsKey()

这就是HashMap首先制作的……

(但不确定你的意思是“顺序完成所有条目”。每个键只有1个条目。)


编辑:

既然你编辑了问题,那么答案是否定的 ! 🙁

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

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

一种常见的模式是使用

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

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

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

BTW:containsKey是相同的

 Set keys = hashMap.keySet(); boolean containsKey = keys.contains(key); 

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

您可以找到所需的信息,但效率低下:

 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 } } 

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

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