1. 程式人生 > >compareTo返回值為-1 、 1 、 0 的排序問題

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

.classNum = classNum;

}

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

ts1 =newTreeSet(

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(

"mm",28,97008));

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是按照降序(由大到小)排序的!希望大家今天能徹底明白,不枉辛苦一字,謝謝!