util包下面的map接口,我写了一个方法,通过值来查找键的,请高手来指教!
小弟近来学习java中的集合,写了个map系列(所有继承mpa接口的集合类)集合的通过值来查找键(key)的方法,但是有错误,先看看代码吧
public class Select
{
public static Object[] mapValue(Map m,Object value)//通过值来查找键,可能返回多个值,
//因为,map中键不可以一样,但是值可以重复
/**
* 原理:由于map是一个键对应一个值,所以一个map中有多少个键,就有多少个值,用2个容器分别保存键和值,
* 然后遍历保存值的容器,如果传进来的参数和值相等,就取出当前容器的下标,
* 按照这个下标,从保存键的容器中取出相应的键
*/
{
if(m.containsValue(value))
{
Collection sKey=m.keySet();//用来保存键的集合
Collection sValue=m.values();//用来保存值的集合
Object o[]=null;//保存键的集合
Object o1[]=null;//保存值的集合
Object o2[]=null;//保存结果的集合
int q=0;
o=sKey.toArray();
o1=sValue.toArray();
System.out.println(o.length+"<---------->"+o1.length);
for(int i=0;i<o.length;i++)
{
System.out.println(o[i]+"----"+o1[i]);
}
for(int k=0;k<o.length;k++)
{
if(value.equals(o1[k]))//这个地方没写好
{
o2[q]=o[k];//结果显示这里有空引用
q=q+1;
}
}
return o2;
}
else
{
return null;
}
}
下面是一个测试的代码
public class MyHashMap
{
public static void main(String[] args) throws Exception
{
HashMap hm=new HashMap();
Stu s1=new Stu(1,"张三");
Stu s2=new Stu(3,"李四");
Stu s3=new Stu(2,"王五");
Grade g1=new Grade(70,80);
Grade g2=new Grade(80,90);
Grade g3=new Grade(70,90);
hm.put(s1,g1);
hm.put(s2,g2);
hm.put(s3,g3);
System.out.println("--------------------");
System.out.println(Select.mapValue(hm,g1));
System.out.println("--------------------");
}
}
这个最后显示出来的结果应该是s1的对象
但是实际的结果是有空引用
请大家帮我看看呀
或者还有更好的办法通过值来查找键的也说说思路,我现在觉得我的这个思路有点错!