【TreeSet】自然排序與比較器排序
阿新 • • 發佈:2019-02-13
1.自然排序
物件類:public class Examinee implements Comparable{//實現介面
private int scorce;
//構造方法與get、set方法略
@Override
public String toString() {
return this.getScorce()+"";
}
/**
* 重寫的compareTo方法
*/
@Override
public int compareTo(Examinee o) {
return o.getScorce() - this.getScorce();
}
}
測試類:
import java.util.TreeSet; public class TreeSetTest { public static void main(String[] args) { //TreeSet自然排序 TreeSet ts = new TreeSet(); ts.add(new Examinee(66)); ts.add(new Examinee(93)); ts.add(new Examinee(52)); ts.add(new Examinee(75)); ts.add(new Examinee(83)); System.out.println(ts);//[93, 83, 75, 66, 52] } }
要點:使用TreeSet自然排序法時需要實現Comparable介面,並將泛型注為當前物件類,然後重寫compareTo();方法。
關於compareTo方法的使用方法:
@override
public int compareTo(類名 形參){
return 形參.返回int型別的方法 - this.與前面相同的方法;
//從大到小排序。若從小到大隻需交換減數與被減數
}
2.比較器排序
物件類:
測試類:public class Examinee{//不實現介面 private int scorce; //構造方法與get、set方法略 @Override public String toString() { return this.getScorce()+""; } /** * 不在此重寫compareTo方法。適用於不允許修改,無法實現Comparable介面的類 */ }
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
//TreeSet比較器排序
TreeSet ts = new TreeSet(new Comparator() {
//使用匿名內部類
@Override
public int compare(Examinee o1, Examinee o2) {
return o1.getScorce() - o2.getScorce();
}
});
ts.add(new Examinee(66));
ts.add(new Examinee(93));
ts.add(new Examinee(52));
ts.add(new Examinee(75));
ts.add(new Examinee(83));
System.out.println(ts);//[52, 66, 75, 83, 93]
}
}
要點:使用TreeSet比較器排序法時不需要實現Comparable介面,只在新建TreeSet時使用匿名內部類重寫compareTo方法即可。當物件類為Java內部類或其他沒有修改許可權的類時可以使用此方法。效果與自然排序相同。在重寫compareTo方法時要注意兩個形參屬性相減的順序。
TreeMap的key排序操作同理。
關於匿名內部類可以參考http://blog.csdn.net/spixii/article/details/52336883