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

java中Collections.sort排序函數(shù)用法詳解

 更新時間:2016年12月09日 10:24:01   作者:浮云中的毛驢  
本篇文章主要介紹了java中Collections.sort排序函數(shù)用法詳解,非常具有實用價值,需要的朋友可以參考下。

Comparator是個接口,可重寫compare()及equals()這兩個方法,用于比價功能;如果是null的話,就是使用元素的默認(rèn)順序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g這樣,當(dāng)然數(shù)字也是這樣的。

compare(a,b)方法:根據(jù)第一個參數(shù)小于、等于或大于第二個參數(shù)分別返回負(fù)整數(shù)、零或正整數(shù)。

equals(obj)方法:僅當(dāng)指定的對象也是一個 Comparator,并且強(qiáng)行實施與此 Comparator 相同的排序時才返回 true。

Collections.sort(list, new PriceComparator());的第二個參數(shù)返回一個int型的值,就相當(dāng)于一個標(biāo)志,告訴sort方法按什么順序來對list進(jìn)行排序。

具體實現(xiàn)代碼方法如下:

Book實體類:

package com.tjcyjd.comparator; 
 
import java.text.DecimalFormat; 
import java.text.SimpleDateFormat; 
import java.util.GregorianCalendar; 
import java.util.Iterator; 
import java.util.TreeMap; 
 
/** 
 * 書實體類 
 * 
 * @author yjd 
 * 
 */ 
public class Book implements Comparable { // 定義名為Book的類,默認(rèn)繼承自O(shè)bject類 
  public int id;// 編號 
  public String name;// 名稱 
  public double price; // 價格 
  private String author;// 作者 
  public GregorianCalendar calendar;// 出版日期 
 
  public Book() { 
    this(0, "X", 0.0, new GregorianCalendar(), ""); 
  } 
 
  public Book(int id, String name, double price, GregorianCalendar calender, 
      String author) { 
    this.id = id; 
    this.name = name; 
    this.price = price; 
    this.calendar = calender; 
    this.author = author; 
  } 
 
  // 重寫繼承自父類Object的方法,滿足Book類信息描述的要求 
  public String toString() { 
    String showStr = id + "\t" + name; // 定義顯示類信息的字符串 
    DecimalFormat formatPrice = new DecimalFormat("0.00");// 格式化價格到小數(shù)點后兩位 
    showStr += "\t" + formatPrice.format(price);// 格式化價格 
    showStr += "\t" + author; 
    SimpleDateFormat formatDate = new SimpleDateFormat("yyyy年MM月dd日"); 
    showStr += "\t" + formatDate.format(calendar.getTime()); // 格式化時間 
    return showStr; // 返回類信息字符串 
  } 
 
  public int compareTo(Object obj) {// Comparable接口中的方法 
    Book b = (Book) obj; 
    return this.id - b.id; // 按書的id比較大小,用于默認(rèn)排序 
  } 
 
  public static void main(String[] args) { 
    Book b1 = new Book(10000, "紅樓夢", 150.86, new GregorianCalendar(2009, 
        01, 25), "曹雪芹、高鄂"); 
    Book b2 = new Book(10001, "三國演義", 99.68, new GregorianCalendar(2008, 7, 
        8), "羅貫中 "); 
    Book b3 = new Book(10002, "水滸傳", 100.8, new GregorianCalendar(2009, 6, 
        28), "施耐庵 "); 
    Book b4 = new Book(10003, "西游記", 120.8, new GregorianCalendar(2011, 6, 
        8), "吳承恩"); 
    Book b5 = new Book(10004, "天龍八部", 10.4, new GregorianCalendar(2011, 9, 
        23), "搜狐"); 
    TreeMap tm = new TreeMap(); 
    tm.put(b1, new Integer(255)); 
    tm.put(b2, new Integer(122)); 
    tm.put(b3, new Integer(688)); 
    tm.put(b4, new Integer(453)); 
    tm.put(b5, new Integer(40)); 
    Iterator it = tm.keySet().iterator(); 
    Object key = null, value = null; 
    Book bb = null; 
    while (it.hasNext()) { 
      key = it.next(); 
      bb = (Book) key; 
      value = tm.get(key); 
      System.out.println(bb.toString() + "\t庫存:" + tm.get(key)); 
    } 
  } 
} 

自定義比較器和測試類:

package com.tjcyjd.comparator; 
 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.GregorianCalendar; 
import java.util.Iterator; 
import java.util.List; 
 
public class UseComparator { 
  public static void main(String args[]) { 
    List<Book> list = new ArrayList<Book>(); // 數(shù)組序列 
    Book b1 = new Book(10000, "紅樓夢", 150.86, new GregorianCalendar(2009, 
        01, 25), "曹雪芹、高鄂"); 
    Book b2 = new Book(10001, "三國演義", 99.68, new GregorianCalendar(2008, 7, 
        8), "羅貫中 "); 
    Book b3 = new Book(10002, "水滸傳", 100.8, new GregorianCalendar(2009, 6, 
        28), "施耐庵 "); 
    Book b4 = new Book(10003, "西游記", 120.8, new GregorianCalendar(2011, 6, 
        8), "吳承恩"); 
    Book b5 = new Book(10004, "天龍八部", 10.4, new GregorianCalendar(2011, 9, 
        23), "搜狐"); 
    list.add(b1); 
    list.add(b2); 
    list.add(b3); 
    list.add(b4); 
    list.add(b5); 
    // Collections.sort(list); //沒有默認(rèn)比較器,不能排序 
    System.out.println("數(shù)組序列中的元素:"); 
    myprint(list); 
    Collections.sort(list, new PriceComparator()); // 根據(jù)價格排序 
    System.out.println("按書的價格排序:"); 
    myprint(list); 
    Collections.sort(list, new CalendarComparator()); // 根據(jù)時間排序 
    System.out.println("按書的出版時間排序:"); 
    myprint(list); 
  } 
 
  // 自定義方法:分行打印輸出list中的元素 
  public static void myprint(List<Book> list) { 
    Iterator it = list.iterator(); // 得到迭代器,用于遍歷list中的所有元素 
    while (it.hasNext()) {// 如果迭代器中有元素,則返回true 
      System.out.println("\t" + it.next());// 顯示該元素 
    } 
  } 
 
  // 自定義比較器:按書的價格排序 
  static class PriceComparator implements Comparator { 
    public int compare(Object object1, Object object2) {// 實現(xiàn)接口中的方法 
      Book p1 = (Book) object1; // 強(qiáng)制轉(zhuǎn)換 
      Book p2 = (Book) object2; 
      return new Double(p1.price).compareTo(new Double(p2.price)); 
    } 
  } 
 
  // 自定義比較器:按書出版時間來排序 
  static class CalendarComparator implements Comparator { 
    public int compare(Object object1, Object object2) {// 實現(xiàn)接口中的方法 
      Book p1 = (Book) object1; // 強(qiáng)制轉(zhuǎn)換 
      Book p2 = (Book) object2; 
      return p2.calendar.compareTo(p1.calendar); 
    } 
  } 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java private關(guān)鍵字用法實例

    java private關(guān)鍵字用法實例

    這篇文章主要介紹了java private關(guān)鍵字用法實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot中@ConfigurationProperties注解的使用與源碼詳解

    SpringBoot中@ConfigurationProperties注解的使用與源碼詳解

    這篇文章主要介紹了SpringBoot中@ConfigurationProperties注解的使用與源碼詳解,@ConfigurationProperties注解用于自動配置綁定,可以將application.properties配置中的值注入到bean對象上,需要的朋友可以參考下
    2023-11-11
  • Java ScheduledExecutorService定時任務(wù)案例講解

    Java ScheduledExecutorService定時任務(wù)案例講解

    這篇文章主要介紹了Java ScheduledExecutorService定時任務(wù)案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 2023最新版本idea用maven新建web項目(親測不報錯)

    2023最新版本idea用maven新建web項目(親測不報錯)

    這篇文章主要給大家介紹了關(guān)于2023最新版本idea用maven新建web項目,Maven是當(dāng)今Java開發(fā)中主流的依賴管理工具,文中介紹的步驟親測不報錯,需要的朋友可以參考下
    2023-07-07
  • Java利用EasyExcel實現(xiàn)合并單元格

    Java利用EasyExcel實現(xiàn)合并單元格

    在某些業(yè)務(wù)場景中可能會有合并單元格的需求,本文將詳細(xì)為大家講解Java如何利用EasyExcel實現(xiàn)合并單元格,感興趣的小伙伴可以了解一下
    2022-06-06
  • Google Guava 緩存工具使用詳解

    Google Guava 緩存工具使用詳解

    這篇文章主要介紹了Guava自加載緩存LoadingCache使用指南,通過這些內(nèi)容介紹,了解了LoadingCache的基本原理和用法,包括如何創(chuàng)建和配置緩存,以及如何結(jié)合Java?8的特性來優(yōu)化代碼,需要的朋友可以參考下
    2023-12-12
  • Java實現(xiàn)字符串倒序輸出的常用方法小結(jié)

    Java實現(xiàn)字符串倒序輸出的常用方法小結(jié)

    這篇文章主要介紹了Java實現(xiàn)字符串倒序輸出的常用方法,通過三個實例從不同角度實現(xiàn)該功能,有不錯的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • Java中回調(diào)函數(shù)?(callback)?及其實際應(yīng)用場景

    Java中回調(diào)函數(shù)?(callback)?及其實際應(yīng)用場景

    在Java中回調(diào)函數(shù)(Callback)是一種常見的設(shè)計模式,用于實現(xiàn)異步操作或事件處理,這篇文章主要給大家介紹了關(guān)于Java中回調(diào)函數(shù)?(callback)?及其實際應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 基于Spring boot @Value 注解注入屬性值的操作方法

    基于Spring boot @Value 注解注入屬性值的操作方法

    這篇文章主要介紹了結(jié)合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java無法輸出中文問題及解決

    Java無法輸出中文問題及解決

    這篇文章主要介紹了Java無法輸出中文問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論