查找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的