猛操女人-猛操网-咪咪爱毛片-米奇久久-91破处视频-91视频综合网

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

當(dāng)前位置:首頁  >  IT問答庫  >  Java基礎(chǔ)知識

Java集合的兩種排序方法

發(fā)布:java基礎(chǔ)教程 2022-02-28 17:05

Java集合的兩種排序方法

推薦答案

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

1.Collections.sort(List list)

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

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

IT技術(shù)

 

  實(shí)體類:(基本屬性,getter/setter方法,有參無參構(gòu)造方法,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("不能轉(zhuǎn)換為Emp類型的對象...");

 

    }

 

}

 

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

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

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

 

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注解標(biāo)注的方法會在其它測試方法執(zhí)行之前先執(zhí)行,

 

    //且只執(zhí)行一次.@Before注解標(biāo)注的方法會在每個測試方法之前執(zhí)行;

 

    //此處初始化集合只需要一次,因此使用@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("不能轉(zhuǎn)換為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("不能轉(zhuǎn)換為Emp類型");

 

            }

 

        });

 

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

 

        for(Object o : list){

 

            System.out.println(o);

 

        }

 

    }

 

}

 

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

 

運(yùn)行結(jié)果如下:

 

排序前:

 

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培訓(xùn)分享:Java集合的兩種排序方法"的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。

最新問答資訊

01 unity用什么編程語言?unity學(xué)習(xí)難度大嗎

學(xué)習(xí) unity 語言
6020 人關(guān)注

02 python容易學(xué)嗎?學(xué)好python有什么好處?

學(xué)習(xí) python 工作 培訓(xùn)
5389 人關(guān)注

03 html是什么語言?html學(xué)習(xí)難嗎?

學(xué)習(xí) html 語言 可以
5062 人關(guān)注

04 c語言難學(xué)嗎?c語言學(xué)好要多久?

語言 技術(shù) 學(xué)習(xí)
4733 人關(guān)注

06 學(xué)好平面設(shè)計要多久?報速成班靠譜嗎?

平面 設(shè)計 學(xué)習(xí) 時間
4238 人關(guān)注

相關(guān)問題

計算機(jī)前端和后端區(qū)別,到底該學(xué)哪一個?

互聯(lián)網(wǎng)行業(yè)的發(fā)展速度很快,有關(guān)市場上對于it行業(yè)的人才需求量越...

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

有很多零基礎(chǔ)的小白想要去學(xué)習(xí)編程技術(shù),那么可以考慮一下java和...

java與java script的區(qū)別有哪些?

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

java中什么是繼承?

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

java byte取值范圍是什么?

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

javascript和java有什么區(qū)別

1)基于對象和面向?qū)ο螅篔ava是一種真正的面向?qū)ο蟮恼Z言,即使是...

測一測
你知道多少IT梗

主站蜘蛛池模板: 刺激花蒂抽搐视频在线看 | 真实国产乱弄免费视频 | 日批视频在线免费看 | 一区二区三区在线观看视频 | 日韩一区二三区无 | 羞羞视频网址 | 九九夜夜操妹子 | 日韩图色 | 日本乱人伦片中文字幕三区 | 最近中文字幕版免费 | 久久com | 欧美成人午夜精品一区二区 | 精品精品国产欧美在线观看 | 欧美日韩国产一区二区 | 高清中文字幕视频在线播 | 亚洲一区二区三区香蕉 | 一级毛片视频免费 | 亚洲专区一 | 亚洲精品第一综合99久久 | 337p日本大胆欧洲色噜噜高清 | 波多野结衣50连精喷在线 | 在线看小视频 | 华人欧美国产在线精品 | 欧美一级做性受 | 大又黄又粗又爽妇女毛片 | 国内精品视频在线观看 | 97碰视频人人做人人爱欧美 | 视频一区二区国产 | 日本三级全黄三级a | 黄色影院在线观看 | 91av综合 | 最近2019年中文字幕一页 | 欧美两性人xxxx高清免费 | 男女性接交无遮挡免费看视频 | 亚洲欧美日韩综合一区 | 最新午夜韩国理论片77网 | 午夜影院免费观看视频 | 黄色国产在线视频 | 欧洲成人免费高清视频 | 毛片在线免费播放 | 欧美性猛交xxxxbbbb |