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

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

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

    聶永的博客

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

    JAVA 兩種排序方式復習

    本文演示了在一個java文件中集成了兩種排序方式,自定義冒泡排序算法進行區別于JDK的內置排序算法。
    傳統模式下的兩種排序算法:
    /**
    * JAVA兩種排序復習
    * 針對具體對象編寫相應的排序代碼,這一部分是經常變動的部分
    * 排序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的排序,經常變動的部分
    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內置的排序算法,當然我們還是可以自己編寫自定義的排序算法,下面代碼僅僅為了演示。
    /**
    * 自定義冒泡排序算法,演示使用,用以替代系統默認的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]

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

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

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

    公告

    所有文章皆為原創,若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

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

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: www.xxxx.com日本免费| 免费看美女午夜大片| 毛片无码免费无码播放 | 免费a级毛片大学生免费观看 | 久久久久亚洲精品无码网址色欲| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 国产成人久久精品亚洲小说| 日本免费中文字幕在线看| 亚洲中文字幕乱码AV波多JI| 日韩毛片无码永久免费看| 老司机午夜在线视频免费观| 亚洲人成无码www久久久| 国产又黄又爽又大的免费视频| 国产V亚洲V天堂A无码| 99re热精品视频国产免费| 亚洲一区二区三区亚瑟 | 你懂得的在线观看免费视频| 国产aⅴ无码专区亚洲av| 久久精品国产大片免费观看| 亚洲国产中文在线二区三区免| 搡女人真爽免费视频大全| 羞羞视频免费观看| 77777亚洲午夜久久多人| 免费国产黄网站在线观看视频| 亚洲国产日韩在线| 四虎永久在线精品免费观看地址| 一级看片免费视频囗交| 亚洲综合婷婷久久| 国产裸模视频免费区无码| 国产日韩精品无码区免费专区国产| 久久久亚洲精品国产| 最近中文字幕mv免费高清电影| 日韩电影免费在线观看网址 | 国产亚洲av片在线观看播放 | 亚洲人精品亚洲人成在线| 亚洲А∨精品天堂在线| 中文字幕成人免费视频| 男女超爽视频免费播放| 亚洲视频2020| 亚洲av无码天堂一区二区三区 | 亚洲视频一区在线|