compareTo返回值為-1 、 1 、 0 的排序問題


首先,先看代碼內容:(希望大家自己可以運行嘗試,以加深記憶和理解)

package s11;
 
import java.util.Comparator;
import java.util.TreeSet;
 
class Student implements Comparable {
String name;
int age;
int classNum;
 
public Student() {
}
 
public Student(String name, int age, int classNum) {
this.name = name;
this.age = age;
this.classNum = classNum;
}
 
public String toString() {
return "Student [name=" + name + ", age=" + age + ", classNum="
+ classNum + "]";
}
 
public int compareTo(Object o) {
Student s = (Student) o;
return this.classNum - s.classNum;
}
}
 
public class Studentdemo {
public static void main(String[] args) {
TreeSet ts1 = new TreeSet(
new Comparator() {
public int compare(Object o1,Object o2) {
Student s1 = (Student)o1;
Student s2 = (Student)o2;
return s1.age > s2.age ? 1 : -1;
}
});
 
ts1.add(new Student("mm",21,97005));
ts1.add(new Student("jerry",19,97003));
ts1.add(new Student("tom",16,97004));
ts1.add(new Student("mm",28,97008));
ts1.add(new Student("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是按照降序(由大到小)排序的!希望大家今天能徹底明白,不枉辛苦一字,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM