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

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

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

日韩精品在线看_黄色成人美女网站_偷窥自拍亚洲色图精选_五月激情综合
亚洲视频高清| 亚洲国产免费看| 国产精品av久久久久久麻豆网| 欧美先锋影音| 国产区欧美区日韩区| **性色生活片久久毛片| 99精品免费网| 欧美一区二区精品| 久久久久久久久伊人| 免费观看成人www动漫视频| 欧美国产精品v| 国产精品亚洲美女av网站| 尤物精品国产第一福利三区| 夜色激情一区二区| 久久久久九九九九| 欧美日韩性生活视频| 国产亚洲欧美一区二区| 亚洲人成网在线播放| 小嫩嫩精品导航| 欧美激情日韩| 国产视频亚洲精品| 日韩一级二级三级| 久久精品视频99| 欧美四级剧情无删版影片| 依依成人综合视频| 亚洲欧美日本在线| 欧美激情中文字幕一区二区| 国产一区二区三区最好精华液| 亚洲美女中出| 久久日韩精品| 国产精品欧美久久久久无广告| 亚洲国产欧美精品| 欧美在线视频不卡| 欧美天堂亚洲电影院在线观看| 狠狠色综合网| 亚洲欧美国产精品桃花| 欧美日本一区| 亚洲风情亚aⅴ在线发布| 午夜精品成人在线视频| 欧美日韩高清一区| 亚洲福利视频网| 先锋亚洲精品| 国产精品福利av| 亚洲精品久久久久久一区二区| 久久av一区二区三区| 国产精品久久久久aaaa樱花| 亚洲精品久久久久中文字幕欢迎你| 久久九九免费| 国产欧美日韩专区发布| 亚洲图片你懂的| 欧美日本精品一区二区三区| 亚洲大胆人体视频| 久久久精品一区二区三区| 国产精品网站在线播放| 宅男噜噜噜66一区二区| 欧美激情精品久久久六区热门| 激情欧美一区二区| 久久av一区二区三区漫画| 国产精品视频一区二区三区| 中日韩高清电影网| 欧美日韩国语| 99精品国产福利在线观看免费| 欧美刺激性大交免费视频| 在线不卡欧美| 久久综合激情| 在线电影院国产精品| 久久久久久久国产| 韩国v欧美v日本v亚洲v| 久久精品国产欧美激情| 国产在线视频欧美| 久久久精彩视频| 黄色一区三区| 久久裸体视频| 一区二区视频免费完整版观看| 久久精品二区三区| 国产一区视频在线观看免费| 欧美在线观看网站| 国产欧美va欧美va香蕉在| 午夜精品福利视频| 国产精品综合av一区二区国产馆| 亚洲一区在线免费观看| 欧美性事在线| 亚洲免费婷婷| 国产日韩欧美在线一区| 欧美在线播放| 精品不卡在线| 欧美暴力喷水在线| 日韩五码在线| 欧美午夜精品久久久久久浪潮| 亚洲午夜激情网页| 国产精品一区视频网站| 欧美在线观看网站| 国产一区在线免费观看| 久久一区免费| 亚洲精品乱码视频| 欧美日韩一区视频| 亚洲欧美在线x视频| 国产日韩欧美综合精品| 久久综合狠狠综合久久综合88| 亚洲国产日韩一区| 欧美日韩亚洲一区二区三区在线| 亚洲图片在线观看| 国产日韩一区二区三区在线| 久久综合国产精品| 亚洲美女黄色| 国产精品久久国产精品99gif| 欧美尤物巨大精品爽| 在线精品国产成人综合| 欧美日韩91| 先锋影院在线亚洲| 在线观看免费视频综合| 欧美日韩成人| 欧美亚洲一区三区| 亚洲国产欧美不卡在线观看| 欧美视频在线播放| 久久成人这里只有精品| 亚洲国产综合91精品麻豆| 欧美日韩视频在线一区二区| 午夜久久tv| 亚洲国产精品一区二区www在线 | 99成人精品| 国产精品一区三区| 嫩草成人www欧美| 亚洲一区二区三区四区五区黄| 国产色综合网| 欧美激情中文字幕乱码免费| 午夜视频在线观看一区| 亚洲国产99| 国产精品视频xxxx| 欧美α欧美αv大片| 亚洲尤物视频网| 亚洲大胆人体视频| 欧美亚洲成人网| 久久综合网络一区二区| 亚洲香蕉视频| 在线观看久久av| 亚洲最新在线视频| 影音先锋日韩精品| 国产精品国产三级国产普通话蜜臀| 久久久精品2019中文字幕神马| 日韩午夜激情| 红桃视频国产精品| 国产精品福利av| 欧美电影在线免费观看网站| 香蕉久久夜色精品国产使用方法| 亚洲黄色精品| 国产一区二区精品在线观看| 欧美日韩色婷婷| 久久综合中文色婷婷| 亚洲欧美日本在线| 99这里有精品| 在线精品国精品国产尤物884a| 国产老肥熟一区二区三区| 欧美激情精品久久久久久| 久久国产黑丝| 亚洲一区国产一区| 日韩视频一区二区三区| 一区在线观看| 国产欧美一二三区| 欧美午夜一区二区福利视频| 欧美a级理论片| 久久久久国产精品人| 亚洲男人天堂2024| 一本大道久久精品懂色aⅴ| 亚洲大胆人体在线| 韩日精品视频一区| 国产精品综合久久久| 欧美视频精品一区| 欧美高清视频一区二区| 久久综合狠狠| 久久久久一区二区| 欧美在线视频日韩| 亚洲欧美日本另类| 亚洲性感美女99在线| 亚洲精品一区二区三| 亚洲二区在线视频| 黄色av成人| 国内外成人免费激情在线视频网站| 国产精品久久久久一区二区三区| 欧美日韩国产小视频| 欧美精品福利| 欧美大成色www永久网站婷| 麻豆精品一区二区av白丝在线| 久久精品1区| 欧美在线日韩| 久久精品72免费观看| 欧美一区二区三区免费看| 亚洲免费小视频| 亚洲综合色视频| 亚洲欧美中文在线视频| 亚洲欧美日韩精品久久| 亚洲一区二区三区高清| 亚洲视频观看| 亚洲一区二区在线观看视频| 亚洲视频欧美视频| 亚洲视频免费| 亚洲一区在线免费| 午夜精品久久久久久久99水蜜桃| 亚洲免费视频成人| 先锋影音国产精品| 欧美在线视频在线播放完整版免费观看| 欧美一区二区三区视频在线观看| 欧美一区二视频| 久久久久久黄|