求教:关于CompareTo的一个问题

maitiantuzi150911 2010-03-19 12:25:26
大家先看代码:

class Student implements Comparable<Student>{
private String name;
private int age;
private float score;
public Student(String name,int age,float score){
this.name=name;
this.age=age;
this.score=score;
}
public String toString(){
return name+"\t\t"+age+"\t\t"+score;
}
public int compareTo(Student stu) {
if(this.score>stu.score){
return -1;
}else if(this.score<stu.score){
return 1;
}else{
if(this.age>stu.age){
return 1;
}else if(this.age<stu.age){
return -1;
}else{
return 0;
}
}
}

}
public class ComparableDemo01 {


public static void main(String[] args) {
Student stu[]={new Student("张三",20,90.0f),new Student("李四",22,90.0f),new Student("找刘",20,70.0f)};
java.util.Arrays.sort(stu);
for(int i=0;i<stu.length;i++){
System.out.println(stu[i]);
}
}

}

我的问题是:利用sort排序时,如何调用Compareto方法实现的
还有,在如下覆写的Compareto方法中,当前对象数组是怎么传递的,this.score 和stu.score是怎么取值的,返回-1,0,1分别代表小于 等于 大于 那么返回的这些数字是怎么比较的呢?谢谢各位啦!
public int compareTo(Student stu) {
if(this.score>stu.score){
return -1;
}else if(this.score<stu.score){
return 1;
}else{
if(this.age>stu.age){
return 1;
}else if(this.age<stu.age){
return -1;
}else{
return 0;
}
}

...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
py330316117 2010-03-20
  • 打赏
  • 举报
回复
你只要重载compareto方法,java就会根据你方法中的内容(就是if else语句)来进行排序,其实你的方法中的判断返回值只是一个标记,负数、零还是正数,分别返回 -1、0 或 1 中的一个值(if判断的2个值得差),如此就比较出大小了(正数说面前一个值大于后一个值)
zhouyong80 2010-03-20
  • 打赏
  • 举报
回复
楼主还是没看我贴出来的源码啊。源码中CompareTo方法返回的是1,0,-1中的一个,这个方法是需要你自己去实现的。sort方法根据compareTo的返回值来判断对象数组的顺序。好好看下源码。
maitiantuzi150911 2010-03-19
  • 打赏
  • 举报
回复
晕 API我早看过了 里面只是泛泛地说了方法的含义 我要问的是既然排序 为什么返回三个整数 两两比较是怎么实现的??
musiclee 2010-03-19
  • 打赏
  • 举报
回复
API帮助文档中写的很详细了 ,楼主以后关于java API函数的问题应当想看看帮助文档 不懂在问啊。。
zhouyong80 2010-03-19
  • 打赏
  • 举报
回复
建议你看下源码:
public static void sort(Object[] a) {
Object[] aux = (Object[])a.clone();
mergeSort(aux, a, 0, a.length, 0);
}


private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off) {
int length = high - low;

// Insertion sort on smallest arrays
if (length < INSERTIONSORT_THRESHOLD) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
}

// Recursively sort halves of dest into src
int destLow = low;
int destHigh = high;
low += off;
high += off;
int mid = (low + high) >>> 1;
mergeSort(dest, src, low, mid, -off);
mergeSort(dest, src, mid, high, -off);

// If list is already sorted, just copy from src to dest. This is an
// optimization that results in faster sorts for nearly ordered lists.
if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {
System.arraycopy(src, low, dest, destLow, length);
return;
}

// Merge sorted halves (now in src) into dest
for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
dest[i] = src[p++];
else
dest[i] = src[q++];
}
}

这下看明白了吧。知道是怎么调用的了吗?

62,618

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧