java 怎样通过hashmap的value得到key

如题所述

java中可以使用hashmap的entry来查找key值,示例如下:

private static ArrayList valueGetKey(Map map,String value) {
    Set set = map.entrySet();//新建一个不可重复的集合
    ArrayList arr = new ArrayList<>();//新建一个集合
    Iterator it = set.iterator();//遍历的类
    while(it.hasNext()) {
      Map.Entry entry = (Map.Entry)it.next();//找到所有key-value对集合
      if(entry.getValue().equals(value)) {//通过判断是否有该value值
        int s = (int)entry.getKey();//取得key值
        arr.add(s);
      }
    }
    return arr;
  }
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-10
楼上的说法不对啊,有时候就会遇到这样的情况!HashMap没有提供这样的功能,但是个人认为可以通过遍历 HashMap 来判断 value 从而得到Key
下面是个测试,仅仅是个人方法,有错还望高手提出!
import java.util.HashMap;
import java.util.Map;
public class Test
{
//通过value拿到key
public Object getKey(Map map,Object value)
{
for(Object key:map.keySet())
if(map.get(key).equals(value))
return key;
return null;
}
public static void main(String[] args)
{
Map<Object,Object> map=new HashMap<Object,Object>();
Test t=new Test();
A a=new A();
B b=new B();

map.put("1","a");
map.put("二",a);
map.put(3,b);
map.put(new B(),4);

System.out.println(t.getKey(map,"a"));
System.out.println(t.getKey(map,a));
System.out.println(t.getKey(map,b));
System.out.println(t.getKey(map,4));
}
}
class A
{
}
class B
{
public String toString(){
return "this is B";
}
}
第2个回答  2010-08-10
有这个需求的话你可以放两个Map,一个是key-value对,另外一个是value-key对
现在的计算机对储存大小的限制可以无视,所以牺牲空间换取效率完全没问题
不然只能遍历,个人非常讨厌长代码。。本回答被提问者采纳
第3个回答  2010-08-10
不行,只能查找HASHMAP里是否有VALUE这个值,既然你要通过VALUE找KEY为什么不把2个顺序调换一下?
相似回答