日期:2014-05-20  浏览次数:20697 次

求教一个关于map的问题
大家都知道在map中数据以键值对的形式存储的,通过key即可得到对应的value。
问题来了,能否通过value查找对应的key?或者有没有其他的数据类型或jdk中现成的方法能够实现的?
------最佳解决方案--------------------
 public Object getKey(java.util.Map map,Object value)
    {
     if(map==null)return null;
     java.util.Collection entrys=map.entrySet();
     java.util.Iterator iterator=entrys==null?null:entrys.iterator();
     while(iterator!=null&&iterator.hasNext())
     {
     java.util.Map.Entry entry=(Entry) iterator.next();
     if(entry.getValue()!=null&&entry.getValue().equals(value))
     {
     return entry.getKey();
     }
     }
     return null;
    }

------其他解决方案--------------------
使用apache commons项目里面的工具包collections,有双向map。
------其他解决方案--------------------
正反其实原理都是一样,看你怎么写罢了。

Map<String, String> map = new HashMap<String, String>(); 

map.put("a", "123");
map.put("b", "456");
map.put("c", "789");

String str = "123";
Iterator<String> it = map.keySet().iterator();
while(it.hasNext()){
String var = (String)it.next();
if(map.get(var).equals(str)){
System.out.println(var + "," + str);
}
}


------其他解决方案--------------------
晕,返过来存就得了。
map.put(value,key)
------其他解决方案--------------------
不好意思,我没说清楚
我知道反过来存也可以,但是这样就要存储在2个map中,我现在用的map中数据量比较大,这样很浪费内存
我就是想找个只需存储在一个map中就能实现的方法,当然也不一非得用map,如果有其他数据类型能够代替的都可以
------其他解决方案--------------------
这个得看你的value是不是唯一的。因为map里的key是唯一的但value是可以重复的。如果value是重复的你怎么对应
------其他解决方案--------------------
引用:
不好意思,我没说清楚
我知道反过来存也可以,但是这样就要存储在2个map中,我现在用的map中数据量比较大,这样很浪费内存
我就是想找个只需存储在一个map中就能实现的方法,当然也不一非得用map,如果有其他数据类型能够代替的都可以

一个还是两个map,对于数据量很大的时候来说,用的内存都一样,主要是决定于数据量。


------其他解决方案--------------------
理解错了。。
------其他解决方案--------------------
现成的结构好像真没有,要自己写的话,要写的好点还得用哈希结构,太麻烦了,
数据量不是太大的话,可以写个简单的
------其他解决方案--------------------
两个list,或两个数组,存的时候对应着存,取的时候,根据index,对应取?