亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中實現(xiàn)Comparable和Comparator對象比較

 更新時間:2016年02月24日 09:43:44   作者:aheizi  
這篇文章主要針對Java中Comparable和Comparator對象進行比較,感興趣的小伙伴們可以參考一下

當(dāng)需要排序的集合或數(shù)組不是單純的數(shù)字型時,通??梢允褂肅omparator或Comparable,以簡單的方式實現(xiàn)對象排序或自定義排序。

A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as sorted sets or sorted maps), or to provide an ordering for collections of objects that don't have a natural ordering. ------API

對字符串List可以直接sort進行排序, 那是因為String 這個對象已經(jīng)幫我們實現(xiàn)了 Comparable接口 , 所以我們的 Person 如果想排序, 也要實現(xiàn)一個比較器。

一. Comparator

對Linkedlist存儲的對象進行排序

import java.util.Comparator;
import java.util.LinkedList;
class Person{
  private float height;
  private String name;
  
  Person(float height)
  {
    this.height=height;
  }
  public float getHeight() {
    return height;
  }
  public void setHeight(float height) {
    this.height = height;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}
class PersonHeight implements Comparator<Person>{
   
  @Override
  //重寫compare方法,return<0不變,return>0則交換順序(保持升序)
  public int compare(Person e1, Person e2) {
    if(e1.getHeight() < e2.getHeight()){
      return 1;
    } else {
      return -1;
    }
  }
}
public class Question3 {
  public static void main(String[] args) {
    Person p1=new Person(23.4f);
    p1.setName("Stud1");
    Person p2=new Person(2.34f);
    p2.setName("Stud2");
    Person p3=new Person(34.32f);
    p3.setName("Stud3");
    Person p4=new Person(56.45f);
    p4.setName("Stud4");
    Person p5=new Person(21.4f);
    p5.setName("Stud5");
    
    LinkedList<Person> al=new LinkedList<Person>();
    al.add(p1);
    al.add(p2);
    al.add(p3);
    al.add(p4);
    al.add(p5);
    
        //調(diào)用sort方法,實現(xiàn)排序
    Collections.sort(al, new PersonHeight());
    
        //遍歷輸出
    for(Person p:al)
      System.out.println(p.getName());
  }
}


附加:

//對日期進行排序
/**
 * 如果o1小于o2,返回一個負數(shù);如果o1大于o2,返回一個正數(shù);如果他們相等,則返回0;
 */
@Override
public int compare(Step o1, Step o2) {
  Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
  Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
  
  //對日期字段進行升序,如果欲降序可采用before方法
  if(acceptTime1.after(acceptTime2)) return 1;
  return -1;
}

二. Comparable

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
class Person implements Comparable{
  private float height;
  private String name;
  
  Person(float height)
  {
    this.height=height;
  }
  public float getHeight() {
    return height;
  }
  public void setHeight(float height) {
    this.height = height;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public int compareTo(Object o) {
    // TODO Auto-generated method stub
    if(this.height>((Person)o).height){
      return 1;
    }else
    return -1;
  }
  
}
public class Question3 {
  public static void main(String[] args) {
    Person p1=new Person(23.4f);
    p1.setName("Stud1");
    Person p2=new Person(2.34f);
    p2.setName("Stud2");
    Person p3=new Person(34.32f);
    p3.setName("Stud3");
    Person p4=new Person(56.45f);
    p4.setName("Stud4");
    Person p5=new Person(21.4f);
    p5.setName("Stud5");
    
    LinkedList<Person> al=new LinkedList<Person>();
    al.add(p1);
    al.add(p2);
    al.add(p3);
    al.add(p4);
    al.add(p5);
    
    Collections.sort(al);
    
    for(Person p:al)
      System.out.println(p.getName());
  }
}

三.比較

Comparable 定義在 Person類的內(nèi)部。
Comparator 是定義在Person的外部的, 此時我們的Person類的結(jié)構(gòu)不需要有任何變化。
兩種方法各有優(yōu)劣, 用Comparable 簡單, 只要實現(xiàn)Comparable 接口的對象直接就成為一個可以比較的對象,但是需要修改源代碼, 用Comparator 的好處是不需要修改源代碼, 而是另外實現(xiàn)一個比較器, 當(dāng)某個自定義的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了, 并且在Comparator 里面用戶可以自己實現(xiàn)復(fù)雜的可以通用的邏輯,使其可以匹配一些比較簡單的對象,那樣就可以節(jié)省很多重復(fù)勞動了。

相關(guān)文章

  • SpringBoot中的聲明式事務(wù)+切面事務(wù)+編程式事務(wù)詳解

    SpringBoot中的聲明式事務(wù)+切面事務(wù)+編程式事務(wù)詳解

    這篇文章主要介紹了SpringBoot中的聲明式事務(wù)+切面事務(wù)+編程式事務(wù)詳解,事務(wù)管理對于企業(yè)應(yīng)用來說是至關(guān)重要的,當(dāng)出現(xiàn)異常情況時,它也可以保證數(shù)據(jù)的一致性,需要的朋友可以參考下
    2023-08-08
  • Java concurrency集合之 CopyOnWriteArrayList_動力節(jié)點Java學(xué)院整理

    Java concurrency集合之 CopyOnWriteArrayList_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java concurrency集合之 CopyOnWriteArrayList的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java刪除二叉搜索樹的任意元素的方法詳解

    Java刪除二叉搜索樹的任意元素的方法詳解

    這篇文章主要介紹了Java刪除二叉搜索樹的任意元素的方法,結(jié)合實例形式詳細分析了java這對二叉搜索樹的遍歷、查找、刪除等相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2020-03-03
  • Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼

    Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼

    這篇文章主要介紹了Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 如何利用java實現(xiàn)生成PDF文件

    如何利用java實現(xiàn)生成PDF文件

    前段時間因為相關(guān)業(yè)務(wù)需求需要后臺生成pdf文件,下面這篇文章主要給大家介紹了關(guān)于如何利用java實現(xiàn)生成PDF文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Java8中用foreach循環(huán)獲取對象的index下標詳解

    Java8中用foreach循環(huán)獲取對象的index下標詳解

    這篇文章主要給大家介紹了關(guān)于Java8中用foreach循環(huán)獲取對象的index下標的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java簡單工廠模式定義與用法實例分析

    Java簡單工廠模式定義與用法實例分析

    這篇文章主要介紹了Java簡單工廠模式定義與用法,結(jié)合實例形式分析了java簡單工廠模式的相關(guān)定義與使用技巧,并給出了原理類圖進行總結(jié),需要的朋友可以參考下
    2019-07-07
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):線性表

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):線性表

    這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • 簡單講解java中throws與throw的區(qū)別

    簡單講解java中throws與throw的區(qū)別

    這篇文章主要介紹了簡單講解java中throws與throw的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中批處理框架spring batch詳細介紹

    Java中批處理框架spring batch詳細介紹

    這篇文章主要介紹了Java中批處理框架spring batch詳細介紹,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論