日韩精品在线看_黄色成人美女网站_偷窥自拍亚洲色图精选_五月激情综合

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

當前位置:首頁  >  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 人關注

相關問題

Java培訓班的課程一般都學習什么內容

首先是Java技術的核心和基礎JavaSE,這一階段會接觸到Java基礎語...

學習Java有哪些技巧嗎

java作為最經典的編程語言之一受到大家的喜愛,不止你我,很多人...

java程序員常用到的技術有哪些

操作系統、計算機網絡這些基礎知識,工作之后基本都忘的差不多了...

int和integer有哪些區別?

int 和 Integer 的基本區別有如下?點: int 是基本數據類型,...

JVM模型的介紹二

JVM模型的介紹二,接著上一篇我們繼續來分享,棧之本地方法棧。 ...

JVM模型的介紹一

Java培訓班教程系列分享JVM模型的介紹一,Java內存分配:JVM定義...

測一測
你知道多少IT梗

日韩精品在线看_黄色成人美女网站_偷窥自拍亚洲色图精选_五月激情综合
亚洲一区二区精品在线| 国产精品免费观看视频| 久久不见久久见免费视频1| 一区二区在线不卡| 亚洲国产一区二区三区a毛片| 国产午夜精品全部视频在线播放| 国产精品成av人在线视午夜片| 国产精品海角社区在线观看| 欧美日一区二区在线观看| 国产精品久久久久久久电影| 欧美日韩国产精品一区| 国产精品欧美激情| 怡红院精品视频| 99热免费精品| 欧美在线观看天堂一区二区三区| 欧美一区二粉嫩精品国产一线天| 午夜国产欧美理论在线播放| 久久精品视频在线看| 欧美精品七区| 国产午夜精品在线| 91久久亚洲| 亚洲视频一二| 亚洲综合国产| 午夜亚洲一区| 欧美在线综合视频| 久久成人免费网| 久久免费视频观看| 免费亚洲一区二区| 欧美另类69精品久久久久9999| 欧美精品成人91久久久久久久| 欧美日韩情趣电影| 激情久久久久久久久久久久久久久久| 精品999日本| 亚洲午夜电影| 模特精品裸拍一区| 国产农村妇女精品一二区| 国精品一区二区| 一区二区冒白浆视频| 久久亚洲春色中文字幕| 国产精品久久夜| 亚洲美女毛片| 久久久亚洲午夜电影| 欧美成人综合一区| 欧美色123| 91久久精品国产91久久性色| 亚洲欧美制服另类日韩| 久久精品一级爱片| 欧美网站大全在线观看| 国产女人精品视频| 亚洲精品在线视频观看| 亚洲主播在线观看| 久久精品国产第一区二区三区| 免费日韩一区二区| 午夜日韩视频| 欧美黄色免费网站| 欧美精品在线观看| 激情视频一区二区三区| 亚洲免费在线看| 久久性天堂网| 欧美日韩亚洲成人| 亚洲国产成人在线播放| 午夜久久美女| 国产精品vvv| 在线观看中文字幕不卡| 亚洲欧美日韩直播| 欧美午夜精品| 日韩香蕉视频| 欧美高清影院| 亚洲欧洲精品成人久久奇米网| 久久久蜜臀国产一区二区| 欧美日韩免费观看一区二区三区| 国产情侣一区| 亚洲欧美一区在线| 国产精品家庭影院| ●精品国产综合乱码久久久久| 久久精品91久久香蕉加勒比| 国产精品美女一区二区| 国产精品99久久久久久久女警| 欧美精品少妇一区二区三区| 国内精品写真在线观看| 一本色道久久88综合亚洲精品ⅰ | 另类综合日韩欧美亚洲| 国产在线视频欧美一区二区三区| 亚洲精品一区二区在线| 欧美wwwwww| 亚洲国产精品悠悠久久琪琪| 久热爱精品视频线路一| 1204国产成人精品视频| 亚洲欧美中文日韩v在线观看| 国产精品青草综合久久久久99| 亚洲线精品一区二区三区八戒| 国产精品www994| 亚洲精品久久久久久久久久久久| 牛牛国产精品| 国产一区二区三区在线观看免费视频| 夜夜嗨av一区二区三区| 欧美视频在线看| 午夜精品一区二区三区在线| 欧美日韩国产在线播放网站| 18成人免费观看视频| 欧美1区视频| 伊大人香蕉综合8在线视| 女人香蕉久久**毛片精品| 亚洲经典三级| 欧美三级第一页| 亚洲欧美日韩天堂| 欧美性猛交99久久久久99按摩| 亚洲欧洲日本专区| 久久亚洲私人国产精品va| 亚洲国产合集| 久久综合伊人77777蜜臀| 亚洲国产精品综合| 欧美日韩第一区| 亚洲精品裸体| 欧美午夜精品久久久久久孕妇| 日韩网站在线| 亚洲免费av电影| 欧美电影免费观看大全| 一区在线影院| 久久精品一二三区| 亚洲人成亚洲人成在线观看图片| 欧美日韩一区二区在线| 性欧美xxxx大乳国产app| 一区二区亚洲精品| 欧美精品综合| 一本久久青青| 国产一区二区高清视频| 欧美刺激性大交免费视频| 亚洲午夜精品国产| 狠狠噜噜久久| 欧美日本国产| 久久精品99国产精品酒店日本| 国产一区日韩欧美| 欧美大片91| 欧美一级黄色网| 亚洲欧洲一区二区在线播放| 欧美极品在线视频| 亚洲免费久久| 国产亚洲制服色| 噜噜噜91成人网| 亚洲激情国产| 国产精品一区二区在线| 欧美1区视频| 欧美一区二区精品久久911| 亚洲国产精品尤物yw在线观看| 欧美肥婆在线| 欧美诱惑福利视频| 亚洲美女免费精品视频在线观看| 欧美日韩国产综合网| 亚洲一区二区三区免费观看 | 欧美日韩精品一区二区天天拍小说 | 国产视频久久久久| 欧美激情一二三区| 一道本一区二区| 国产精品美女999| 性欧美长视频| 99在线热播精品免费99热| 国产精品呻吟| 欧美激情精品久久久久久黑人 | 激情av一区| 欧美国产极速在线| 亚洲色图综合久久| 亚洲成人在线免费| 国产精品主播| 欧美日韩免费观看一区=区三区| 久久精品国产欧美激情| 亚洲一级二级| 黄网站色欧美视频| 国产精品视频成人| 欧美日韩一区二区高清| 麻豆av一区二区三区久久| 欧美亚洲综合久久| 在线观看视频免费一区二区三区| 欧美精品免费播放| 久热精品视频在线观看| 一区二区三区视频在线观看| 在线日本成人| 国产在线拍偷自揄拍精品| 国产精品视频免费观看www| 欧美日韩国产专区| 欧美激情一区二区三区在线视频观看| 亚洲在线观看视频| 在线精品观看| 国产综合香蕉五月婷在线| 欧美日韩国产一中文字不卡| 欧美一区二区三区另类| 亚洲国内高清视频| 激情国产一区二区| 国产专区欧美专区| 国产一区二区三区奇米久涩| 欧美日韩伦理在线免费| 午夜精品久久久久久久男人的天堂| 国产亚洲视频在线| 亚洲视频免费在线观看| 国产在线乱码一区二区三区| 欧美午夜激情视频| 欧美va亚洲va日韩∨a综合色| 亚欧美中日韩视频| 中国av一区| 国产亚洲精品久久久| 一区二区三区高清不卡| 国产精品美女一区二区在线观看| 久久久久久久网站| 日韩亚洲一区二区|