求教一个关于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是重复的你怎么对应
------其他解决方案--------------------
一个还是两个map,对于数据量很大的时候来说,用的内存都一样,主要是决定于数据量。
------其他解决方案--------------------理解错了。。
------其他解决方案--------------------现成的结构好像真没有,要自己写的话,要写的好点还得用哈希结构,太麻烦了,
数据量不是太大的话,可以写个简单的
------其他解决方案--------------------两个list,或两个数组,存的时候对应着存,取的时候,根据index,对应取?