java-Collections的sort集合排序方法

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CollectionsDemo {
    public static void main(String[] args) {
        /**
         * Collections.sort方法實現排序
         * Collections是集合的工具類,它提供了很多便於我們操作集合的方法
         * 其中就有用於集合排序的sort方法
         * -void sort(List<T> list):該方法的作用是對給定的集合元素進行自然排序
         * 
         * 在使用Collecions的sort排序的集合元素都必須是Comparable接口的實現類,該接口表示其子類是可比較的
         * 因爲實現該接口必須重寫抽象方法:-int compareTo(T t)
         * 
         * 自然排序(Collections.sort(list)):list集合中的元素必須實現Comparable接口,重寫compareTo方法,一般用於java對提供的API對象進行排序(String,Date,Integer等)
         * 自定義排序(Collections.sort(list,比較器));對list集合中的對象沒有限制,必須提供“比較器”對象,sort會利用比較器進行比較大小進行排序,用途廣泛:可以進行任意數據比較
         */
        List<String> list=new ArrayList();
        list.add("Aange");
        list.add("erge");
        list.add("dage");
        Collections.sort(list);
        System.out.println(list);
        //sort方法是如何比較兩個字符串大小的
        //Aange 比 dage小?
        //String類型提供比較字符串大小的方法
        //compare 比較 to 與xxx比較
        //compareTo 返回三種狀態:>0  <0  ==0
        //n>0表示第一個數大
        //n<0表示第一個數小
        //n=0表示相等  compareTo比較值爲0時equals爲true
        int n="Aange".compareTo("dage");
        System.out.println(n);//-35<0

        List<Cat> list1=new ArrayList<Cat>();
        list1.add(new Cat(9));
        list1.add(new Cat(15));
        list1.add(new Cat(30));
        list1.add(new Cat(13));
        Collections.sort(list1,new ByAge());//按自定義比較
        /**輸出比較結果**/
        for(int i=0;i<list1.size();i++) {
            System.out.println(list1.get(i).age);
        }
    }
}
/**
 * 自定義比較器 Comparator
 *
 */
class ByAge implements Comparator<Cat> {
    //自定義比較算法:按照貓對象的年齡比較大小
    //返回>0則o1>02;返回<0則o1<o2;返回=0,o1=o2
    @Override
    public int compare(Cat o1, Cat o2) {
        return o1.age-o2.age;
    }


}
//自然排序
class Cat implements Comparable<Cat>{
    int age;

    public Cat(int age) {
        super();
        this.age = age;
    }

    @Override
    public int compareTo(Cat o) {

        return this.age-o.age;//升序
    }

}
發佈了155 篇原創文章 · 獲贊 37 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章