欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中實(shí)現(xiàn)對(duì)象排序的兩種方法(Comparable,Comparator)

 更新時(shí)間:2022年12月13日 10:03:45   作者:穆雄雄  
這篇文章主要給大家介紹了關(guān)于java中實(shí)現(xiàn)對(duì)象排序的兩種方法,一種是實(shí)現(xiàn)Comparable進(jìn)行排序,另一種是實(shí)現(xiàn)Comparator進(jìn)行排序,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言:

我們知道,在平時(shí)做項(xiàng)目的過程中,我們總會(huì)用到各種各樣的排序,或是升序,或是降序。在java中,要實(shí)現(xiàn)排序有好多中方式,比如我們耳熟能詳?shù)拿芭菖判?、選擇排序等,但是我們一般都不用寫,JDK給我們提供了好多現(xiàn)成方法供我們使用,今天我們就來看看,java中如何使用Comparator進(jìn)行排序。

1、實(shí)現(xiàn)Comparable進(jìn)行排序

下面我們來看一個(gè)簡單的例子:

package org.test;

/**
 * 
* 
* 項(xiàng)目名稱:BianChengXiGuan 
* 類名稱:Student 
* 類描述:學(xué)生類
* 創(chuàng)建人:Mu Xiongxiong 
* 創(chuàng)建時(shí)間:2020-10-19 上午8:47:01 
* 修改人:Mu Xiongxiong 
* 修改時(shí)間:2020-10-19 上午8:47:01 
* 修改備注:
* 個(gè)人博客:https://blog.csdn.net/qq_34137397
* 微信公眾號(hào):雄雄的小課堂
* @version    
*
 */
public class Student implements Comparable<Student>{
  /**
   * 學(xué)生編號(hào)
   */
  private int sid;
  
  /**
   * 學(xué)生姓名
   */
  private String name;
  
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getSid() {
    return sid;
  }
  public void setSid(int sid) {
    this.sid = sid;
  }
  /**
   * 
       * 構(gòu)造函數(shù) 
       * @discription 
       * @author Mu Xiongxiong 
       * @created 2020-10-19 上午8:47:43 
       * @param sid
       * @param name 
     * 個(gè)人博客:https://blog.csdn.net/qq_34137397
     * 微信公眾號(hào):雄雄的小課堂
   */
  public Student(int sid, String name) {
    super();
    this.sid = sid;
    this.name = name;
  }
  /**
   * 
       * 構(gòu)造函數(shù) 
       * @discription 
       * @author Mu Xiongxiong 
       * @created 2020-10-19 上午8:47:48 
     * 個(gè)人博客:https://blog.csdn.net/qq_34137397
     * 微信公眾號(hào):雄雄的小課堂
   */
  public Student() {
    super();
  }
  
  //接口中必須要實(shí)現(xiàn)的方法
  //按照sid進(jìn)行排序
  //如果傳過來的sid比本身的sid小的話,返回1,升序
  //如果傳過來的sid比本身的sid大的話,返回-1,降序
  @Override
  public int compareTo(Student o) {
    if(sid>o.sid){
      return 1;
    }else if(sid==o.sid){
      return 0;
    }else{
      return -1;
    }
  }

}

這是一個(gè)很簡單的Student實(shí)體類,其中對(duì)字段的封裝,以及構(gòu)造方法就不在這里說明了。重點(diǎn)看compareTo方法,此方法是Comparable接口中的方法,我們實(shí)現(xiàn)了Comparable接口之后必須要實(shí)現(xiàn)該方法。要實(shí)現(xiàn)升序和降序,肯定少不了比較,那么compareTo方法的作用就在此,用來比較的!

代碼中,compareTo方法中實(shí)現(xiàn)的是按照sid進(jìn)行排序,如果傳過來的sid比本身的sid小的話,返回1,升序。如果傳過來的sid比本身的sid大的話,返回-1,降序。 然后我們寫個(gè)測試方法進(jìn)行測試:

//對(duì)集合進(jìn)行排序
  public static void testSortList(){
    List<Student> stus = new ArrayList<Student>();
    stus.add(new Student(1,"a"));
    stus.add(new Student(4,"d"));
    stus.add(new Student(5,"e"));
    stus.add(new Student(2,"b"));
    stus.add(new Student(3,"c"));
    System.out.println("排序之前:");
    for (Student s : stus) {
      System.out.println(s.getSid()+"---"+s.getName());
    }
    Collections.sort(stus);
    //Collections.sort(stus,new SortName());
    System.out.println("排序之后:\n");
    for (Student s : stus) {
      System.out.println(s.getSid()+"---"+s.getName());
    }
  }

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

這是升序,如果想要降序排序,簡單的改一下compareTo方法的比較符號(hào)即可。按照sid進(jìn)行排序,比較簡單,那假如現(xiàn)在有這樣的需求:按照姓名(字符)順序降序排序,我們應(yīng)該怎么實(shí)現(xiàn)?

2、實(shí)現(xiàn)Comparator進(jìn)行排序

我們看Collections.sort方法,他還有一個(gè)重載方法Collections.sort(Listlists,Comparator c);可以接受一個(gè)Comparator實(shí)現(xiàn)類,我們就可以利用這一點(diǎn),實(shí)現(xiàn)對(duì)name進(jìn)行排序,代碼如下:

package org.test;

import java.util.Comparator;

public class SortName implements Comparator<Student> {

  @Override
  public int compare(Student o,Student o1) {
    return o1.getName().compareTo(o.getName());
  }
}

接著稍微改一下Collections.sort方法,如下:

Collections.sort(stus,new SortName());

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

到此,排序完成,最后大家在思考一下,如果name的值為漢字,那么可以按照姓名的首字母倒序排序嗎?

總結(jié)

到此這篇關(guān)于java中實(shí)現(xiàn)對(duì)象排序的兩種方法的文章就介紹到這了,更多相關(guān)java對(duì)象排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 獲取 jar包以外的資源操作

    Java 獲取 jar包以外的資源操作

    這篇文章主要介紹了Java 獲取 jar包以外的資源操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • JavaCV實(shí)現(xiàn)多個(gè)MP4視頻的合并

    JavaCV實(shí)現(xiàn)多個(gè)MP4視頻的合并

    這篇文章主要為大家詳細(xì)介紹了如何使用javacv和ffmpeg框架實(shí)現(xiàn)簡單快速的合并mp4文件的視頻和音頻,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • java實(shí)現(xiàn)短信驗(yàn)證碼5分鐘有效時(shí)間

    java實(shí)現(xiàn)短信驗(yàn)證碼5分鐘有效時(shí)間

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)短信驗(yàn)證碼5分鐘有效時(shí)間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • idea中springboot項(xiàng)目創(chuàng)建后追加依賴

    idea中springboot項(xiàng)目創(chuàng)建后追加依賴

    在項(xiàng)目創(chuàng)建的時(shí)候選擇好依賴創(chuàng)建項(xiàng)目,之后追加依賴不是很方便,本文就來介紹一下idea中springboot項(xiàng)目創(chuàng)建后追加依賴,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • sa-token?路由攔截式鑒權(quán)使用示例詳解

    sa-token?路由攔截式鑒權(quán)使用示例詳解

    這篇文章主要為大家介紹了sa-token?路由攔截式鑒權(quán)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Spring?boot?使用QQ郵箱進(jìn)行一個(gè)驗(yàn)證登入功能

    Spring?boot?使用QQ郵箱進(jìn)行一個(gè)驗(yàn)證登入功能

    這篇文章主要介紹了Spring?boot?使用QQ郵箱進(jìn)行一個(gè)驗(yàn)證登入,主要包括qq郵箱開啟權(quán)限和創(chuàng)建發(fā)送驗(yàn)證碼的請(qǐng)求Controller,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Java中的值傳遞以及引用傳遞和數(shù)組傳遞詳解

    Java中的值傳遞以及引用傳遞和數(shù)組傳遞詳解

    這篇文章主要介紹了Java中的值傳遞以及引用傳遞和數(shù)組傳遞詳解,Java不允許程序員選擇按值傳遞還是按引用傳遞各個(gè)參數(shù),就對(duì)象而言,不是將對(duì)象本身傳遞給方法,而是將對(duì)象的的引用或者說對(duì)象的首地址傳遞給方法,引用本身是按值傳遞的,需要的朋友可以參考下
    2023-07-07
  • mybatis如何批量添加一對(duì)多中間表

    mybatis如何批量添加一對(duì)多中間表

    這篇文章主要介紹了mybatis如何批量添加一對(duì)多中間表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot項(xiàng)目中的視圖解析器問題(兩種)

    SpringBoot項(xiàng)目中的視圖解析器問題(兩種)

    SpringBoot官網(wǎng)推薦使用HTML視圖解析器,但是根據(jù)個(gè)人的具體業(yè)務(wù)也有可能使用到JSP視圖解析器,所以本文介紹了兩種視圖解析器,感興趣的可以了解下
    2020-06-06
  • SpringBoot使用Swagger范例講解

    SpringBoot使用Swagger范例講解

    Swagger是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 Restful 風(fēng)格的 Web 服務(wù)??傮w目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新。文件的方法、參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來始終保持同步
    2022-07-07

最新評(píng)論