import java.util.*;
public class MyComparable implements Comparable
{    int id;
    String name;
    public MyComparable(int id,String name) 
    {
        this.id=id;
        this.name=name;
    }
    public int compareTo(Object o)
    {
        int i=((MyComparable)o).id;
//        if(name==((MyComparable)o).name)
//        {
//            if(id>i)
//            {
//                return 1;
//            }
//            else if(id==i)
//            {
//                return 0;
//            }
//            else
//            {
//                return -1;
//            }
//        }
//        else
//        {
//            return -1;
//        }
//              return (id>i?1:(id==i)?0:-1);
    }
    public String toString()
    {
        return ("编号>>>"+id+"---姓名>>>"+name);
        
    }
    public static void main(String[] args) 
    {
        MyComparable m[]=new MyComparable[3];
        m[0]=new MyComparable(8,"aaa");
        m[1]=new MyComparable(9,"bbb");
        m[2]=new MyComparable(7,"ccc");
        Arrays.sort(m);
        for(int i=0;i<3;i++)
        {
            System.out.println(m[i]);
        }
        int a=Arrays.binarySearch(m,new MyComparable(8,"abc"));
        //这里请看清楚,我查找的对象是new MyComparable(8,"abc")),而m[0]是(8,"aaa")
        //按道理来说,这肯定是查不到的,如果不重写equals方法他会查的到,而且按照我下面的
        //那种方法重写还是会查的到,我认为是equals方法里面写的有问题
        //但是不重写equals方法,把上面注释的代码放出,就正确了,唉,高手来帮我下吧!
        System.out.println(a);
        
    }    public boolean equals(Object arg0) {
        // TODO 自动生成方法存根
        if(id==((MyComparable)arg0).id && name==((MyComparator)arg0).name)
        {
            return true;
        }
        else
        {
            return false;
        }
        
    }
}望高手给我个解释呀,郁闷了一晚上了!

解决方案 »

  1.   

    不行呀,name.equals(((MyComparator)arg0).name)
    我这样写的,不行!
      

  2.   

    按你的写法,和equals有什么关系,根本就会用到equals另外,还有 crazer2003() 提到的==来比较String这种低级错误
      

  3.   

    to:kingfish(八百里秦川@龙城异客) ( ) 信誉:115 
    给点提示好吗,我该怎么来实现代码,保证传进来的对象的每个属性都相等时,用binarySerach方法判断的有这个对象?
    谢谢了
      

  4.   

    public int compareTo(Object o) {
        MyComparable t = (MyComparable) o;
        if (this.equals(t)) return 0;
        return (id > t.id ? 1 : -1);
      }  public boolean equals(Object arg0) {
       return(id == ( (MyComparable) arg0).id &&name.equals( ( (MyComparable) arg0).name)) ;
      }
      

  5.   

    to: kingfish(八百里秦川@龙城异客) ( ) 信誉:115 
    能帮我看看是不是这样写的呀?
    public class MyComparable implements Comparable
    {    int id;
        String name;
        public MyComparable(int id,String name) 
        {
            this.id=id;
            this.name=name;
        }
        public int compareTo(Object o)
        {
            int i=((MyComparable)o).id;
            MyComparable t=(MyComparable)o;
            if(this.equals(t)) return 0;
            return (id>i?1:-1);
        }
        public String toString()
        {
            return ("编号>>>"+id+"---姓名>>>"+name);
            
        }
        public static void main(String[] args) 
        {
            MyComparable m[]=new MyComparable[3];
            m[0]=new MyComparable(8,"aaa");
            m[1]=new MyComparable(9,"bbb");
            m[2]=new MyComparable(7,"ccc");
            Arrays.sort(m);
            for(int i=0;i<3;i++)
            {
                System.out.println(m[i]);
            }
            int a=Arrays.binarySearch(m,new MyComparable(8,"abc"));
            System.out.println(a);
            
        }
        /* (非 Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        public boolean equals(Object arg0) {
            // TODO 自动生成方法存根
            return(id==((MyComparable)arg0).id && name.equals(((MyComparator)arg0).name));
            
            
        }
    }
      

  6.   

    我这样写的,运行的结果最后有异常
    Exception in thread "main" java.lang.ClassCastException: zy_Comparator.MyComparable
    at zy_Comparator.MyComparable.equals(MyComparable.java:57)
    at zy_Comparator.MyComparable.compareTo(MyComparable.java:29)
    at java.util.Arrays.binarySearch(Unknown Source)
    at zy_Comparator.MyComparable.main(MyComparable.java:48)
    结果有点不正确呀,调用binarySearch方法,如果你传进去的对象不在对象数组中,则这个方法会返回负数的!
      

  7.   

    //运行的结果最后有异常
    你自己写错MyComparator//则这个方法会返回负数的
    不返回负数返回什么?