亚洲国产综合在线-亚洲国产综合网-亚洲国产综合人成综合网站00-亚洲国产综合久久精品-www成人国产在线观看网站-www成年人

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

當前位置:首頁  >  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梗

停不了的爱在线观看| 午夜成人理论无码电影在线播放| 无码人妻精品中文字幕免费东京热| 少妇特殊按摩高潮爽翻天| 欧美老妇交乱视频在线观看| 久久九九久精品国产免费直播| 插花弄玉曲径通幽| 亚洲熟妇成人精品二区蜜臀| 亚洲 欧美 中文 日韩AⅤ| 日本老熟妇MATUREBBW| 久久久久久精品无码人妻| 国产女人被躁到高潮的AV| 大量潮喷潮喷极限高H| AV无码东京热亚洲男人的天堂| 亚洲色欲久久久综合网东京热| 性色AV 一区二区三区| 日本适合十八岁以上的护肤品一 | 皇上骑带木棒的早朝| 成人永久免费福利视频免费| JAPANESE55丰满成熟| √最新版天堂资源网在线| 亚洲AV永久无码精品九九| 拍摄AV现场失控高潮数次| AV天堂午夜精品一区二区三区| 五十路熟妇亲子交尾| 色欲欲WWW成人网站| 日本又黄又爽又无遮挡的视频 | 吃奶摸下激烈床震视频试看| 2021国内精品久久久久精免费| 亚洲熟女丰满多毛XXXXX| 中文在线А√在线| 成人无码激情视频在线观看| 国产在线无遮挡免费观看| 久久精品国产久精国产果冻传媒| 看成年女人午夜毛片免费| 欧美XXXXX高潮喷水麻豆| 日日人人爽人人爽人人片AV| 体验区试看120秒十八禁| 亚洲国产日韩欧美一区二区三区 | 波多野结衣的影片| 国产精品无码一区二区三区电影| 精品国产A∨无码一区二区三区| 沈陽43歲熟女高潮視頻| 伊人狠狠色丁香婷婷综合| 一二三四在线视频社区3| JAPANESEHD无码中文字| 国产精品JIZZ在线观看| 久久久亚洲熟妇熟| 日本一本2017国产| 日韩精品无码人成视频手机| 我和岳乱妇三级高清电影| 真实差差差无掩盖视频30分钟| 国产成年无码久久久久下载| 麻豆av一区二区三区久久| 色综合天天视频在线观看| 玩乡下黄花小处雏女| 一本大道东京热无码视频| 国产成人无码VA在线观看| 欧美日韩一区精品视频一区二| 亚洲欧美偷拍综合图区| 国产品无码一区二区三区在线蜜桃 | 精品三级久久久久电影我网| 美女脱个精光扒开尿口图片无遮挡| 欧美老熟妇性BBBBBXXXX| 西西人体大胆WWW444| 菠萝视频免费最新在线观看| 久久一区二区三区精华液| 色一乱一伦一图一区二区精品| 亚洲日韩AV无码| 69无人区码一码二码三码区别 | 亚洲AV中文无码乱人伦下载| 睡着了强行挺进岳身体| 欧美综合天天夜夜久久| 免费免费视频片在线观看| 久久久国产99久久国产久| 婚后失控BY南城非梦| 国产熟女一区二区三区四区五区| 成人亚洲欧美在线观看| 宝贝张开腿嗯啊高潮了视频 | 亚洲桃色AV无码| 亚洲AV永久无码精品一区二区国| 五月天国产亚洲AV麻豆| 天堂种子在线WWW网| 色欲AV伊人久久大香线蕉影院| 人人澡人人妻人人爽人人蜜桃麻豆 | 97亚洲狠狠色综合久久| 中文字幕成人精品久久不卡| 野花日本大全免费观看中文7| 亚洲另类无码专区首页| 亚洲国产精品久久久久网站| 亚洲AV无码成人| 亚洲AV无码国产精品色| 亚洲AⅤ无码一区二区波多野| 无码日韩做暖暖大全免费不卡| 日韩欧美国产精品亚洲二区| 日本插槽X8插槽怎么用的| 人人妻人人澡人人爽人人到DVD | 粉嫩AV一区二区精品爆乳| 把腿张大点就可以吃到扇贝了视频| メスのちトラレ_在线| JIZZJIZZ中国18大学生| 99精品国产在热久久婷婷| AV人摸人人人澡人人超碰手机版 | 色综合视频一区二区三区44| 秋霞电影院yy2933| 欧美最猛黑人XXXXWWW| 欧美人与性动交α欧美精品| 欧美日韩人妻精品一区二区在线 | 亚洲AV成人永久网站www在线| 新妺妺窝人体色7777太粗| 性XXXXX大片免费视频| 无码人妻丰满熟妇啪啪网不卡| 性亚洲VIDEOFREE高清极| 亚洲AⅤ精品无码一区二区| 亚洲AV蜜臀日韩AV无码污网站| 午夜人妻久久久久久久久| 免费观看大片的APP视频| 麻豆国产丝袜白领秘书在线观看 | 中国老熟妇自拍HD发布| 伊人久久大香线蕉AV色| 在线永久无码不卡AV| 坐公交忘穿内裤被挺进老| 2019理论韩国理论中文| GAY男同帅哥网站在线观看| YYYY11111少妇影院| 爆乳邻居肉欲中文字幕| 把腿张大点就可以吃到扇贝了视频| 厨房里的激战2免费观看不打丐赛 厨房里的激战2李明人物介绍 | 国产又黄又大又粗视频| 韩国无码AV片在线观看| 精品久久久久久久无码| 老汉扛起娇妻玉腿进入| 里面也请好好疼爱漫画最新章节| 免费无码VA一区二区三区| 欧美一级内射黑人内射| 日韩精品内射视频免费观看| 挺进邻居人妻雪白的身体韩国电影| 亚洲 欧美 变态 另类 综合| 亚洲精品无码专区久久同性男| 伊人色综合久久天天五月婷| 51CG10 吃瓜 爆料| АⅤ资源中文在线天堂| 丰满的少妇XXXXX人妻| 国产麻豆剧传媒精品国产AV| 精品久久久中文字幕人妻| 老头巨大挺进莹莹的体内免费视频| 欧美日韩精品视频一区二区 | 黑人又粗又大又 ╳乂| 久久久久久亚洲精品成人| 女人被爽到呻吟GIF动态图| 日韩AV片无码一区二区三区不卡 | 99久久国语露脸精品国产| 成年免费A级毛片免费看| 国产精品毛片无遮挡| 精品无码国产一区二区三区AV| 乱码人妻Av一区二区三区| 欧洲老太太BBBH| 天天爽天天狠久久久综合麻豆| 亚洲AV无码一区二区三区性色| 一级伦奷片高潮无码看了5| CHINESE0LDMAN老汉| 高清无码国产黄色视频人爽人一区二区| 国产午夜福利久久精品| 久久久久久A亚洲欧洲AⅤ| 欧美午夜成人精品| 熟女亚洲综合精品伊人久久| 亚洲成AV人无码综合在线| 又大又粗弄得我好爽GIF| 八戒八戒神马2021| 国产精品免费观看调教网| 久久99热狠狠色精品一区| 欧美黑人XXXX高潮猛交| 天美传媒MV免费观看| 亚洲乱亚洲乱妇24P| 69ZXX少妇内射无码| 疯狂做受XXXX高潮不断| 黑人异族巨大巨大巨粗| 免费萌白酱国产一区二区三区| 日韩欧美亚洲综合久久影院D3 | 精品久久久久久无码国产| 男男激情H视频Gay片GV| 色综合天天综合狠狠爱| 亚洲国产成人精品无码一区二区 | 亚洲欧美中文日韩在线V日本| 97久久人人超碰超碰窝窝| 国产A级作爱片无码| 久久99精品久久久久久国产| 欧美性狂猛BBBBBBXXXXXX| 无码中文字幕在线播放2| 野花影视大全在线观看免费| 草莓丝瓜芭乐鸭脖奶茶搭配食物| 国产偷亚洲偷欧美偷精品| 美丽人妻在夫前被黑人| 肉体XXXXXⅠ8XXXX| 亚洲AV中文无码| AV天堂亚洲国产AV| 国产精品玖玖玖在线资源| 浪荡女天天不停挨CAO日常视频 | 精品久久久久香蕉网| 欧美一区二区三区激情|