compareTo返回值為-1 、 1 、 0 的排序問題
首先,先看程式碼內容:(希望大家自己可以執行嘗試,以加深記憶和理解)
package s11;
import java.util.Comparator;
import java.util.TreeSet;
classStudentimplementsComparable{
String name;
int age;
int classNum;
publicStudent(){
}
publicStudent(String name,int age,int classNum){
this.name = name;
this.age = age;
this
}
publicString toString(){
return"Student [name="+ name +", age="+ age +", classNum="
+ classNum +"]";
}
publicint compareTo(Object o){
Student s =(Student) o;
returnthis.classNum - s.classNum;
}
}
publicclassStudentdemo{
publicstaticvoid main(String[] args){
TreeSet
newComparator(){
publicint compare(Object o1,Object o2){
Student s1 =(Student)o1;
Student s2 =(Student)o2;
return s1.age > s2.age ?1:-1;
}
});
ts1.add(newStudent("mm",21,97005));
ts1.add(newStudent("jerry",19,97003));
ts1.add(newStudent("tom",16,97004));
ts1.add(newStudent(
ts1.add(newStudent("mm",23,97006));
System.out.println("語句return s1.age > s2.age ? 1 : -1;是按照???排列的:");
System.out.println(ts1);
}
}
這是執行結果:
語句return s1.age > s2.age ?1:-1;是按照升序(由小到大)排列的:
[Student[name=tom, age=16, classNum=97004],
Student[name=jerry, age=19, classNum=97003],
Student[name=mm, age=21, classNum=97005],
Student[name=mm, age=23, classNum=97006],
Student[name=mm, age=28, classNum=97008]]
也就是說當語句return s1.age > s2.age ? 1 : -1;的返回值為1時,也就是說 s1的值大於s2的值時 ,compareTo是按照升序(由小到大)排序的!
當返回值為-1時,也就是說 s1的值小於s2的值時 ,compareTo是按照降序(由大到小)排序的!
當返回值為0時,s1等於s2的值,如果數值全部相等則排序也同樣按照初始順序排列,如果只有前兩個數值相等,那麼,compareTo會繼續比較下一組s1 與 s2的值,同樣, s1的值大於s2的值時 ,compareTo是按照升序(由小到大)排序的, s1的值小於s2的值時 ,compareTo是按照降序(由大到小)排序的!希望大家今天能徹底明白,不枉辛苦一字,謝謝!