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;
}
}
}望高手给我个解释呀,郁闷了一晚上了!
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;
}
}
}望高手给我个解释呀,郁闷了一晚上了!
我这样写的,不行!
给点提示好吗,我该怎么来实现代码,保证传进来的对象的每个属性都相等时,用binarySerach方法判断的有这个对象?
谢谢了
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)) ;
}
能帮我看看是不是这样写的呀?
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));
}
}
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方法,如果你传进去的对象不在对象数组中,则这个方法会返回负数的!
你自己写错MyComparator//则这个方法会返回负数的
不返回负数返回什么?