1. 程式人生 > >java sort排序

java sort排序

栗子

預設的sort方法,根據元素的自然順序,將指定的列表按升序排序12345。
注:倒序54321
第二個方法,根據指定比較器產生的順序對指定的列表進行排序。
jdk1.7API

快速記憶法

參考
當前物件與後一個物件進行比較,如果比較結果為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;
//    }