成人区精品一区二区婷婷,91caoporn在线,a√在线中文网新版址在线,蜜臀久久99精品久久久无需会员

千鋒教育-做有情懷、有良心、有品質的職業教育機構

當前位置:首頁  >  IT問答庫  >  Java基礎知識

Java集合的兩種排序方法

發布:java基礎教程 2022-02-28 17:05

Java集合的兩種排序方法

推薦答案

  Java集合的兩種排序方法,Java集合的工具類Collections中提供了兩種排序的方法,分別是:

1.Collections.sort(List list)

2.Collections.sort(List list,Comparator c)

  diyi種稱為自然排序,參與排序的對象需實現comparable接口,重寫其compareTo()方法,方法體中實現對象的比較大小規則,示例如下:

IT技術

 

  實體類:(基本屬性,getter/setter方法,有參無參構造方法,toString方法)

package test;

public class Emp implements Comparable {

  private String name;

  

    private int 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;

 

    }

 

    public Emp() {

 

        super();

 

    }

 

    public Emp(String name, int age) {

 

        super();

 

        this.name = name;

 

        this.age = age;

 

    }

 

    @Override

 

    public String toString() {

 

        return "Emp [name=" + name + ", age=" + age + "]";

 

    }

 

    @Override

 

    public int compareTo(Object o) {

 

        if(o instanceof Emp){

 

            Emp emp = (Emp) o;

 

//          return this.age-emp.getAge();//按照年齡升序排序

 

            return this.name.compareTo(emp.getName());//換姓名升序排序

 

        }

 

        throw new ClassCastException("不能轉換為Emp類型的對象...");

 

    }

 

}

 

  第二種叫定制排序,或自定義排序,需編寫匿名內部類,new一個Comparator接口的比較器對象c,同時實現compare()其方法;

  然后將比較器對象c傳給Collections.sort()方法的參數列表中,實現排序功能;

  說明:diyi種方法不夠靈活,實體類實現了comparable接口后,會增加耦合,如果在項目中不同的位置需要根據不同的屬性調用排序方法時,需要反復修改比較規則(name還是按age),二者只能選擇其一,會起沖突.第二種就很好地解決了這個問題.在需要的地方,創建個內部類的實例,重寫其比較方法即可.

 

jUnit4單元測試類代碼如下:

 

package test;

 

import java.util.ArrayList;

 

import java.util.Collections;

 

import java.util.Comparator;

 

import java.util.List;

 

import org.junit.BeforeClass;

 

import org.junit.Test;

 

public class TestSort {

 

    static List list = new ArrayList();

 

    //@BeforeClass注解標注的方法會在其它測試方法執行之前先執行,

 

    //且只執行一次.@Before注解標注的方法會在每個測試方法之前執行;

 

    //此處初始化集合只需要一次,因此使用@BeforeClass.

 

    @BeforeClass

 

    public static void init(){

 

        list.add(new Emp("tom",18));

 

        list.add(new Emp("jack",20));

 

        list.add(new Emp("rose",15));

 

        list.add(new Emp("jerry",17));

 

        System.out.println("排序前:");

 

        for(Object o : list){

 

            System.out.println(o);

 

        }

 

    }

 

    /**age升序排序*/

 

//  @Test

 

//  public void testSortAge(){

 

//      Collections.sort(list);

 

//      System.out.println("自然排序按age排序后:");

 

//      for(Object o : list){

 

//          System.out.println(o);

 

//      }

 

//  }

 

//

 

    /**name升序排序*/

 

    @Test

 

    public void testSortName(){

 

        Collections.sort(list);

 

        System.out.println("自然排序按name升序排序后:");

 

        for(Object o : list){

 

            System.out.println(o);

 

        }

 

    }

 

    /**使用Comparator比較器按age升序排序*/

 

    @Test

 

    public void testComparatorSortAge(){

 

        Collections.sort(list,new Comparator () {

 

            @Override

 

            public int compare(Object o1, Object o2) {

 

                if(o1 instanceof Emp && o2 instanceof Emp){

 

                    Emp e1 = (Emp) o1;

 

                    Emp e2 = (Emp) o2;

 

                    return e1.getAge() - e2.getAge();

 

                }

 

                throw new ClassCastException("不能轉換為Emp類型");

 

            }

 

        });

 

        System.out.println("使用Comparator比較器按age升序排序后:");

 

        for(Object o : list){

 

            System.out.println(o);

 

        }

 

    }

 

    /**使用Comparator比較器按name升序排序*/

 

    @Test

 

    public void testComparatorSortName(){

 

        Collections.sort(list,new Comparator () {

 

            @Override

 

            public int compare(Object o1, Object o2) {

 

                if(o1 instanceof Emp && o2 instanceof Emp){

 

                    Emp e1 = (Emp) o1;

 

                    Emp e2 = (Emp) o2;

 

                    return e1.getName().compareTo(e2.getName());

 

                }

 

                throw new ClassCastException("不能轉換為Emp類型");

 

            }

 

        });

 

        System.out.println("使用Comparator比較器按name升序排序后:");

 

        for(Object o : list){

 

            System.out.println(o);

 

        }

 

    }

 

}

 

右鍵空白位置>Run As>JUnit Test>

 

運行結果如下:

 

排序前:

 

Emp [name=tom, age=18]

 

Emp [name=jack, age=20]

 

Emp [name=rose, age=15]

 

Emp [name=jerry, age=17]

 

自然排序按name升序排序后:

 

Emp [name=jack, age=20]

 

Emp [name=jerry, age=17]

 

Emp [name=rose, age=15]

 

Emp [name=tom, age=18]

 

使用Comparator比較器按age升序排序后:

 

Emp [name=rose, age=15]

 

Emp [name=jerry, age=17]

 

Emp [name=tom, age=18]Emp [name=jack, age=20]使用Comparator比較器按name升序排序后:Emp [name=jack, age=20]Emp [name=jerry, age=17]Emp [name=rose, age=15]Emp [name=tom, age=18]

  以上就是小編介紹的"Java培訓分享:Java集合的兩種排序方法"的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。

最新問答資訊

01 unity用什么編程語言?unity學習難度大嗎

學習 unity 語言
6020 人關注

02 python容易學嗎?學好python有什么好處?

學習 python 工作 培訓
5389 人關注

03 html是什么語言?html學習難嗎?

學習 html 語言 可以
5062 人關注

04 c語言難學嗎?c語言學好要多久?

語言 技術 學習
4733 人關注

06 學好平面設計要多久?報速成班靠譜嗎?

平面 設計 學習 時間
4238 人關注

相關問題

計算機前端和后端區別,到底該學哪一個?

互聯網行業的發展速度很快,有關市場上對于it行業的人才需求量越...

java和php的區別是什么?哪一個更難一些?

有很多零基礎的小白想要去學習編程技術,那么可以考慮一下java和...

java與java script的區別有哪些?

相信大多數同學對java、java script都不會陌生,二者都是編程語...

java中什么是繼承?

繼承的特點:只需明確一點,java只支持單繼承,不支持多繼承,但...

java byte取值范圍是什么?

同學您好,java byte取值范圍是什么?針對這個問題可以看看下面的...

javascript和java有什么區別

1)基于對象和面向對象:Java是一種真正的面向對象的語言,即使是...

測一測
你知道多少IT梗

成人区精品一区二区婷婷,91caoporn在线,a√在线中文网新版址在线,蜜臀久久99精品久久久无需会员
日韩国产在线观看| 美女黄网久久| 日韩精品免费一区二区夜夜嗨 | 在线看片福利| 国产精品jk白丝蜜臀av小说| 欧美日韩亚洲一区三区| 日韩黄色免费网站| 日韩激情啪啪| 青青伊人久久| 久久激情综合网| 国产精品videossex| 国产高清亚洲| 成人午夜在线| 久久国产欧美| 日韩一级不卡| 99视频在线精品国自产拍免费观看| 亚洲国产一区二区三区在线播放| 91久久中文| 蜜臀av在线播放一区二区三区| 亚洲精品激情| 国产精品日韩精品中文字幕| 久久亚洲黄色| 91精品在线观看国产| 亚洲大全视频| 亚洲精品高潮| 国产精品videossex| 国产在线看片免费视频在线观看| 成人免费电影网址| 日韩午夜黄色| 日本伊人久久| 婷婷综合国产| 久久av网址| 日韩国产网站| 天堂av在线一区| 91午夜精品| 成人国产精品一区二区免费麻豆| 亚洲成人精品| 午夜久久av | 在线成人直播| 中文精品电影| 麻豆久久一区二区| 日本国产精品| 亚洲欧洲国产精品一区| 久久一区欧美| 在线精品视频在线观看高清| 日韩avvvv在线播放| 国产99在线| 中文不卡在线| 福利在线免费视频| 视频在线观看国产精品| 麻豆精品新av中文字幕| 精品欧美激情在线观看| 欧美一级二区| 日韩大片在线| 亚洲免费毛片| 秋霞影视一区二区三区| 日本一区福利在线| 欧美少妇精品| 日韩欧美中文字幕在线视频| 91视频精品| 中文字幕日本一区| 91亚洲国产高清| 石原莉奈在线亚洲三区| 精品一区电影| 日韩在线一二三区| 国产成人免费av一区二区午夜| 99在线观看免费视频精品观看| 国产精品白丝av嫩草影院| 午夜国产精品视频免费体验区| 日本在线不卡视频一二三区| 亚洲综合在线电影| 日韩av一区二区三区| 日韩av首页| 国产精品一卡| 久久国产88| 久久影视三级福利片| 日韩精品一级二级 | 国产日韩中文在线中文字幕 | 国产激情在线播放| 亚洲精品极品| 亚洲v在线看| 久久精品一区二区国产| 中文字幕一区二区三区日韩精品| 波多野结衣久久精品| 国产探花在线精品| 免费观看在线综合| 欧美成人久久| av免费不卡国产观看| 国产无遮挡裸体免费久久 | 伊人精品一区| 国产精品草草| 亚洲精品亚洲人成在线观看| 日本在线高清| 国产精品久久久亚洲一区| 久久国产精品毛片| 欧美日韩精品免费观看视欧美高清免费大片| 日韩**一区毛片| 1024精品一区二区三区| 精品国产中文字幕第一页| 五月亚洲婷婷 | 麻豆精品网站| 久久精品青草| 成午夜精品一区二区三区软件| 18国产精品| 亚洲精品进入| 免费在线视频一区| 国内精品福利| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲一区二区网站| 麻豆精品蜜桃| 欧美xxxx中国| 国产精品成人3p一区二区三区| 亚洲精品视频一二三区| 日韩一级网站| 午夜国产精品视频| 九九综合在线| 91成人精品| 亚洲精品午夜av福利久久蜜桃| 亚洲天堂1区| 伊人久久国产| 色一区二区三区| 国产精品国产一区| 久久爱www成人| 国产精品任我爽爆在线播放| 日韩精品一区二区三区av| 中文在线日韩| 日韩欧美高清一区二区三区| 亚洲欧美激情诱惑| 免费av一区| 日韩视频一区| 视频在线观看一区二区三区| 亚洲在线网站| 亚洲网址在线观看| 日韩视频一二区| 国产精品一区二区精品| 国产精品v日韩精品v欧美精品网站| 国产美女精品视频免费播放软件| 国产亚洲精品美女久久 | 亚洲精品韩国| 日韩一区二区三区免费视频| **爰片久久毛片| 久久国产麻豆精品| 美女久久精品| 日韩精品dvd| 欧美在线亚洲| 亚洲三级在线| 国产图片一区| 精品国产亚洲一区二区三区在线| 成人一区而且| 欧美丝袜一区| 国产视频亚洲| 亚洲精品免费观看| 国产精品一级在线观看| 国产aa精品| 欧美中文字幕一区二区| 天堂av在线一区| 亚洲免费一区三区| 国产精品亚洲综合色区韩国| 精品视频高潮| 99精品在线观看| 久久亚洲视频| 国产精品欧美一区二区三区不卡 | 精品国产一级| 欧美美女一区| 四虎国产精品免费久久| 国产经典一区| 91精品国产调教在线观看| 在线亚洲成人| 国产亚洲精品精品国产亚洲综合| 久久这里只有精品一区二区| 日本欧美不卡| 亚洲欧美不卡| 美女久久久久久| 图片区亚洲欧美小说区| 日本不卡高清视频| bbw在线视频| 午夜亚洲精品| 久久久91麻豆精品国产一区| 免费视频一区三区| 日本va欧美va瓶| 蜜臀国产一区| 亚洲精品一级| 日韩在线精品| 日韩欧美久久| 91看片一区| 五月国产精品| 99精品在线免费在线观看| 日韩不卡手机在线v区| 日韩精品91| 日本国产亚洲| 激情婷婷欧美| 国产精品久久免费视频| 女人天堂亚洲aⅴ在线观看| 国产精品久久国产愉拍| 亚洲欧美一区在线| 久久久久97| 亚洲精品影视| 久久网站免费观看| 久久av超碰| 男女精品网站|