<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學習的點點滴滴。

    JAVA 兩種排序方式復習

    本文演示了在一個java文件中集成了兩種排序方式,自定義冒泡排序算法進行區(qū)別于JDK的內(nèi)置排序算法。
    傳統(tǒng)模式下的兩種排序算法:
    /**
    * JAVA兩種排序復習
    * 針對具體對象編寫相應的排序代碼,這一部分是經(jīng)常變動的部分
    * 排序Arrays.sort方法為不變的部分,封裝了具體排序算法
    * 兩者結合,一個策略模式出來了
    *
    * @author xiaomin
    */

    public class Person implements Serializable, Comparable<Person> {
    private static final long serialVersionUID = -23536L;

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

    // 正序排列,針對具體bean的排序,經(jīng)常變動的部分
    public int compareTo(Person o) {
    if (o == null)
    return -1;

    return this.getAge() < o.getAge() ? -1 : (this.getAge() == o.getAge() ? 0 : 1);
    }

    public String toString() {
    return "name : " + getName() + " age : " + getAge();
    }

    public static void main(String... args) {
    Person[] persons = { new Person("a", 12), new Person("b", 10),
    new Person("demo", 23), new Person("hello", 22),
    new Person("hello", 32) };

    System.out.println("排序前 ......");
    System.out.println(Arrays.toString(persons));

    System.out.println("排序后 ......");
    Arrays.sort(persons);
    System.out.println(Arrays.toString(persons));

    System.out.println("使用自定義排序 ......");

    // 適用于沒有繼承Comparable的bean或需要自行定制的排序方式
    Arrays.sort(persons, new Comparator<Person>() {
    public int compare(Person o1, Person o2) {// 倒敘排列
    return o1.getAge() > o2.getAge() ? -1 : (o1.getAge() == o2.getAge() ? 0 : 1);
    }
    });

    System.out.println(Arrays.toString(persons));
    }
    }

    一般還是建議使用JDK內(nèi)置的排序算法,當然我們還是可以自己編寫自定義的排序算法,下面代碼僅僅為了演示。
    /**
    * 自定義冒泡排序算法,演示使用,用以替代系統(tǒng)默認的Arrays.sort
    * @author xiaomin
    *
    */

    public class BubbleSort {
    public static void main(String[] args) {
    Person[] persons = { new Person("a", 12), new Person("b", 10),
    new Person("demo", 23), new Person("hello", 22),
    new Person("hello", 32) };

    System.out.println("排序前 ......");
    System.out.println(Arrays.toString(persons));

    System.out.println("排序后 ......");
    bubble(persons);
    System.out.println(Arrays.toString(persons));

    System.out.println("使用自定義排序 ......");

    // 適用于沒有繼承Comparable的bean或需要自行定制的排序方式
    bubble(persons, new Comparator<Person>() {
    public int compare(Person o1, Person o2) {// 倒敘排列
    return o1.getAge() > o2.getAge() ? -1 : (o1.getAge() == o2.getAge() ? 0 : 1);
    }
    });

    System.out.println(Arrays.toString(persons));
    }

    public static <T> void bubble(T [] ts, Comparator<? super T> c){
    for(int i = 0; i < ts.length; i ++){
    for(int j = ts.length -1; j > i; j--){
    if(c.compare(ts[j-1], ts[j]) > 0){
    swap(ts, j-1, j);
    }
    }
    }
    }

    public static <T extends Comparable<T>> void bubble(T [] ts){
    for(int i = 0; i < ts.length; i ++){
    for(int j = ts.length -1; j > i; j--){
    if(ts[j-1].compareTo(ts[j]) > 0){
    swap(ts, j-1, j);
    }
    }
    }
    }

    private static <T> void swap(T [] ints,int index1, int index2){
    T temp = ints[index1];

    ints[index1] = ints[index2];

    ints[index2] = temp;
    }
    }
     
    兩種排序輸出結果:
    排序前 ......
    [name : a age : 12, name : b age : 10, name : demo age : 23, name : hello age : 22, name : hello age : 32]
    排序后 ......
    [name : b age : 10, name : a age : 12, name : hello age : 22, name : demo age : 23, name : hello age : 32]
    使用自定義排序 ......
    [name : hello age : 32, name : demo age : 23, name : hello age : 22, name : a age : 12, name : b age : 10]

    若有時間,也可以實現(xiàn)其它常見的排序算法。

    關于 Arrays的Sort算法分析 : http://www.slideshare.net/zianed/arrayssort 可以參考一下。

    posted on 2010-10-05 17:24 nieyong 閱讀(722) 評論(0)  編輯  收藏 所屬分類: Java

    公告

    所有文章皆為原創(chuàng),若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統(tǒng)計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产V亚洲V天堂无码| 免费国产a国产片高清| 亚洲AV成人精品网站在线播放| 色费女人18女人毛片免费视频| 午夜dj在线观看免费视频| 亚洲日韩av无码中文| 国产成人免费片在线观看| 高潮毛片无遮挡高清免费视频| 全亚洲最新黄色特级网站| 欧亚一级毛片免费看| 久久激情亚洲精品无码?V| 美女巨胸喷奶水视频www免费| 亚洲精品国产精品乱码视色| 可以免费观看的国产视频| 91亚洲导航深夜福利| 国产免费久久精品99re丫y| 亚洲成a∨人片在无码2023| 五月婷婷亚洲综合| 花蝴蝶免费视频在线观看高清版 | 亚洲a∨无码精品色午夜| 国产午夜免费秋霞影院| 免费人成在线观看播放a| 亚洲精品成人无码中文毛片不卡| 免费一级毛片无毒不卡| 亚洲成人网在线观看| 成人国产mv免费视频| eeuss影院ss奇兵免费com| 久久亚洲免费视频| 好吊妞788免费视频播放| 新最免费影视大全在线播放| 亚洲精品自产拍在线观看动漫| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 人禽杂交18禁网站免费| 久久亚洲中文无码咪咪爱| 国产亚洲欧洲精品| 亚洲欧洲免费无码| 在线观看人成视频免费无遮挡| 亚洲成a人片在线观看中文app| 免费在线看片网站| 18禁美女裸体免费网站| 国产精品亚洲精品爽爽|