Java中Array.sort()的排序原理

People[] people={
new People("小飞飞","2","2:41:28"),
new People("小国","2","11:1:32"),
new People("小威","4","17:23:3"),
new People("大飞","2","14:52:13"),
new People("晶晶","1","2:18:25"),
new People("死佳","2","4:13:15"),
new People("旭旭","2","4:48:39"),
new People("阿雪","1","3:34:13"),
new People("小强","1","2:53:47") };
Arrays.sort(people);
为什么它会用第二个字符串排序呢,sort的底层排序是什么原理啊!求各位大虾指点!在线等。。。。。。。
我的People类
class People implements Comparable<People>{
String name;
String times;
String time;
public People(String name,String times,String time){
this.name=name;
this.times=times;
this.time=time;
}

public int compareTo(People p1){
int countc=times.compareTo(p1.times);
int countt=p1.time.compareTo(p1.time);
return countc!=0?countc:countt;
}

public String toString(){
return name+" "+times+" "+time;
}

}
一楼说的优先级问题,但我的都是字符串啊,问什么它他按第一个字符串的字典顺序排呢,第二个字符串难道会在Java内部自动转换成字符串,然后在按优先级排序吗,还是不太懂,大虾在指点一下

这要看你的People类中的int compareTo(T o)方法是怎么定义的了,
要想使用sort(),数组中的所有元素都必须实现 Comparable 接口
我想你的People类中应该有这个方法

sort()方法是按对象的自然顺序排序,也就是int compareTo(T o)方法定义的顺序.
看看java.lang.Comparable接口

public int compareTo(People p1){//String类实现了Comparable接中,表示按字典顺序排序
int countc=times.compareTo(p1.times);//this.times>p1.times返回1,<返回-1,=返回0
int countt=p1.time.compareTo(p1.time);//这里永远等于0了,p1.是不是要去掉啊
return countc!=0?countc:countt;//当countc!=0,返回countc,否则返回countt
}
个人理解:当返回1时,系统认为当前对象比p1大,放到p1后边,
当返回-1时,系统认为当前对象比p1小,放到p1前边,
当返回0是,系统认为当前对象等于p1,顺序不变
所以:
你定义的是当times不同是,就按times从小到大排序,相同时就按原来顺序排序.
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-22
首先compareTo方法有问题,第二行我想应该是
int countt=time.compareTo(p1.time);
否则p1.time和p1.time怎么比都是一样的,返回0。
这个比较逻辑就是,如果两个People的times不相等,就按times的顺序来,如果相等,就按time的顺序来。
又由于times和time定义的时候都是String,所以会按照String的排序方法来比较。按照你的想法,应该times转成int,time转成date,然后再比较,应该就没问题了。
第2个回答  2010-05-22
sort的底层排序原理,我用自己的经验说说,不一定是你需要的,
它是对Object数组进行排序,优先级别是int,String,
int属性ComparaTo方法。而String实现String。ComparTo方法。本回答被提问者采纳
第3个回答  2010-05-22
你看java 的api 文档啊:

sort
public static void sort(Object[] a)根据元素的自然顺序,对指定对象数组按升序进行排序。
相似回答