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

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

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

    聶永的博客

    記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

    JAVA 兩種排序方式復(fù)習(xí)

    本文演示了在一個(gè)java文件中集成了兩種排序方式,自定義冒泡排序算法進(jìn)行區(qū)別于JDK的內(nèi)置排序算法。
    傳統(tǒng)模式下的兩種排序算法:
    /**
    * JAVA兩種排序復(fù)習(xí)
    * 針對(duì)具體對(duì)象編寫相應(yīng)的排序代碼,這一部分是經(jīng)常變動(dòng)的部分
    * 排序Arrays.sort方法為不變的部分,封裝了具體排序算法
    * 兩者結(jié)合,一個(gè)策略模式出來(lái)了
    *
    * @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;
    }

    // 正序排列,針對(duì)具體bean的排序,經(jīng)常變動(dò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("使用自定義排序 ......");

    // 適用于沒(méi)有繼承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)置的排序算法,當(dāng)然我們還是可以自己編寫自定義的排序算法,下面代碼僅僅為了演示。
    /**
    * 自定義冒泡排序算法,演示使用,用以替代系統(tǒng)默認(rèn)的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("使用自定義排序 ......");

    // 適用于沒(méi)有繼承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;
    }
    }
     
    兩種排序輸出結(jié)果:
    排序前 ......
    [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]

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

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

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

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請(qǐng)標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    最新隨筆

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品无码国产片| 亚洲色图校园春色| 性做久久久久免费观看| 成人免费黄色网址| 人妻无码一区二区三区免费 | 水蜜桃视频在线观看免费播放高清| 最新亚洲春色Av无码专区 | 久久免费视频精品| 无码人妻一区二区三区免费看 | 亚洲大片在线观看| 亚洲色精品vr一区二区三区| 国产亚洲美女精品久久久2020| 又黄又爽无遮挡免费视频| 国产乱子影视频上线免费观看| 国产免费观看青青草原网站| 日本成人在线免费观看| 国产一区二区三区免费视频| 亚洲一区二区三区乱码A| 国外亚洲成AV人片在线观看| 亚洲中文字幕视频国产| 亚洲AV无一区二区三区久久| 亚洲黄色免费网址| 亚洲色无码专区一区| 日本激情猛烈在线看免费观看| a毛片视频免费观看影院| www视频在线观看免费| 永久免费AV无码网站在线观看| 四虎永久免费影院| 亚洲人成网址在线观看| 亚洲小说图区综合在线| eeuss免费天堂影院| 亚州免费一级毛片| 亚洲人成人无码网www电影首页| 亚洲日本一区二区| fc2免费人成为视频| 久久久久国色AV免费观看性色| 免费一级毛片在线播放| 亚洲视频在线免费播放| 男女一边摸一边做爽的免费视频| 成人毛片视频免费网站观看| 亚洲AV无码国产精品麻豆天美|