java sort排序
栗子
預設的sort方法,根據元素的自然順序,將指定的列表按升序排序12345。
注:倒序54321
第二個方法,根據指定比較器產生的順序對指定的列表進行排序。
快速記憶法
參考
當前物件與後一個物件進行比較,如果比較結果為1進行交換,其他不進行交換。
當後一個物件比當前物件大,返回結果值為1時,前後交換,說明是倒序排列。
當後一個物件比當前物件小,返回結果值為1時,前後交換,說明是升序排列。
//Integer集合,正序排序 List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9)); Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer t1, Integer t2) { return t1 - t2; } });
1.什麼是Comparable介面
此介面強行對實現它的每個類的物件進行整體排序。此排序被稱為該類的自然排序 ,類的 compareTo 方法被稱為它的自然比較方法 。實現此介面的物件列表(和陣列)可以通過 Collections.sort (和 Arrays.sort )進行自動排序。實現此介面的物件可以用作有序對映表中的鍵或有序集合中的元素,無需指定比較器。 強烈推薦(雖然不是必需的)使自然排序與 equals 一致。所謂與equals一致是指對於類 C 的每一個 e1和 e2 來說,當且僅當 (e1.compareTo((Object)e2) == 0) 與e1.equals((Object)e2) 具有相同的布林值時,類 C 的自然排序才叫做與 equals 一致 。
2.實現什麼方法
int compareTo(T o)
比較此物件與指定物件的順序。如果該物件小於、等於或大於指定物件,則分別返回負整數、零或正整數。
強烈推薦 (x.compareTo(y)==0) == (x.equals(y)) 這種做法,但不是 嚴格要求這樣做。一般來說,任何實現 Comparable 介面和違背此條件的類都應該清楚地指出這一事實。推薦如此闡述:“注意:此類具有與 equals 不一致的自然排序。”
引數:
o - 要比較的物件。
返回:
負整數、零或正整數,根據此物件是小於、等於還是大於指定物件。
丟擲:
ClassCastException - 如果指定物件的型別不允許它與此物件進行比較。
3.例項
package test1;
public class Note<T> implements Comparable<Note<T>> {
private T data; //資料
private int weight; //權值
private Note<T> left; //左孩子
private Note<T> right; //右孩子
public Note(T data,int weight){
this.data=data;
this.weight=weight;
}
@Override
public String toString(){
return "data="+this.data+",weitht="+this.weight;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public Note<T> getLeft() {
return left;
}
public void setLeft(Note<T> left) {
this.left = left;
}
public Note<T> getRight() {
return right;
}
public void setRight(Note<T> right) {
this.right = right;
}
/**
* 倒序排列。
*/
@Override
public int compareTo(Note<T> o) {
if(o.weight>this.weight){
return 1;
}else if(o.weight<this.weight){
return -1;
}
return 0;
}
/**
* 升序排列
*/
// @Override
// public int compareTo(Note<T> o){
// if(this.weight>o.weight){
// return 1;
// }else if(this.weight<o.weight){
// return -1;
// }
// return 0;
// }