最近写了一个程序关于在map系列的集合中通过值来查找键
但是结果很是让我大失所望!
有类Grade,Stupublic class Grade 
{    int chinese;
    int math;
    public Grade(int c,int m) 
    {
        chinese=c;
        math=m;
    }    /* (非 Javadoc)
     * @see java.lang.Object#toString()
     */
    public String toString() {
        // TODO 自动生成方法存根
        return "语文>>>:"+chinese+"   数学>>>"+math;
    }
    public boolean equals(Object arg0) {
        // TODO 自动生成方法存根
        if(((Grade)arg0).math==math  && ((Grade)arg0).chinese==chinese)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}Stu类和Grade类一样,保存学生的姓名和编号,重写了toString方法,没有重写equals方法有HashMap类MyHashMappublic 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(70,90);
        Grade g3=new Grade(70,80);
        hm.put(s1,g1);
        hm.put(s2,g2);
        hm.put(s3,g3);
//        if(hm.containsKey(s3))
//        {            
//            System.out.println(s3+"的成绩为"+hm.get(s3));
//        }
//        else
//        {
//            System.out.println("没有这个学生");
//        }        
        //System.out.println(hm.get(s2));       
        System.out.println("--------------------");       
        Object obj[]=Select.mapValue(hm,g3);//用下面的那个方法总是不能正确显示结果,郁闷
        for(int i=0;i<obj.length;i++)
        {
            if(obj[i]!=null)
            {
                System.out.println((Stu)(obj[i]));
            }            
        }
        
        System.out.println("--------------------");
    }
}
希望大家能帮我看看,到底是什么地方错了!谢谢了
下面是查询的类,有一个方法public class Select 
{
    public static Object[] mapValue(Map m,Object value)//通过值来查找键,可能返回多个值,
//因为,map中键不可以一样,但是值可以重复
    {
        if(m.containsValue(value))
        {
            Collection sKey=m.keySet();//用来保存键的集合            Object o2[]=new Object[m.size()] ;
            //保存结果的集合,注意这里要对数组进行初始化,否则会出现空引用
            Iterator it=sKey.iterator();//用一个迭代器接收所有的键
            int i=0;
            while(it.hasNext())
            {
                if(value.equals(m.get(it.next())))
                //在遍历这个迭代器时判断当参数传进来的值和当前遍历到的键对应的值如果相等
                //那么当前的键为结果之一
                {
                    Object o=it.next();
                   
                    o2[i]=o;//把当前的遍历到的键保存到结果对象数组中
                    i=i+1;
                }            }
            /****************************************/            return o2;
        }
        else
        {
            return null;
        }
    }
}

解决方案 »

  1.   

    public class Select 
    {
        public static Object[] mapValue(Map m,Object value)//通过值来查找键,可能返回多个值,
        //因为,map中键不可以一样,但是值可以重复
        {
            if(m.containsValue(value))
            {
                Collection sKey=m.keySet();//用来保存键的集合            Object o2[]=new Object[m.size()] ;
                //保存结果的集合,注意这里要对数组进行初始化,否则会出现空引用
                Iterator it=sKey.iterator();//用一个迭代器接收所有的键
                int i=0;
                while(it.hasNext())
                {
                    Object key = it.next();
                    if(value.equals(m.get(key)))
                    //在遍历这个迭代器时判断当参数传进来的值和当前遍历到的键对应的值如果相等
                    //那么当前的键为结果之一
                    {
                        Object o=key;
                       
                        o2[i]=o;//把当前的遍历到的键保存到结果对象数组中
                        i=i+1;
                    }            }
                /****************************************/            return o2;
            }
            else
            {
                return null;
            }
        }
    }
      

  2.   

    to:mofeir(损人专家) ( ) 信誉:99 
    谢谢你的告知,我又范了一个很低级的错误!让你见笑了