import java.util.Arrays;
class ArrayTest
{
public static void main(String[] args)
{
Students[] ss=new Students[]{new Students(10,"aa"),
new Students(15,"bb"),
new Students(16,"zz"),
new Students(16,"dd"),};
Arrays.sort(ss);
for(int i=0;i<ss.length;i++)
{
System.out.println(ss[i]);
}
int index = Arrays.binarySearch(ss,new Students(10,"aa"));
System.out.println("index="+ index);
System.out.println(ss[index]);
}
}
class Students implements Comparable
{
int num;
String name;
Students(int num,String name)
{
this.num=num;
this.name=name;
}
public String toString()
{
return "number "+ num+" name "+name;
}
public int compareTo(Object o)
{
Students s = (Students)o;
//return num>s.num ? 1 : (num==s.num ? 1 : -1);
int result=num>s.num ? 1 : (num==s.num ? 1 : -1);
if(0==result)
{
result=name.compareTo(s.name);
}
return result;
}
}
编译无错,在运行的时候,会出现数据索引越界的异常错误,不知道错在何方?
你这样写不可能相等,所以,用二分查找找不到,返回的index为-1,就下标越界了改成这样就好了
int result=num>s.num ? 1 : (num==s.num ? 0 : -1);
经鉴定过,确实重写了compare的类后的问题!
//return num>s.num ? 1 : (num==s.num ? 1 : -1);
int result=num>s.num ? 1 : (num==s.num ? 1 : -1);lz是不是没改成?
这里应该是ss.length-1
如果你想要在SS数组里面找Students(10,"aa")这个对象的话,本来是可以找到的,
但是你现在的代码里面找的是新new出来的Students(10,"aa"),这个跟你前面放进数组里面的那个
Students 不是同一个对象,所以找不到.
可以先把Student student= new Students(10,"aa");
再把student放到数组里面,找的时候
int index = Arrays.binarySearch(ss,student);
这样就可以找到对象,也就不会出现下标越界啦~~~