最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

一. Comparator

對(duì)Linkedlist存儲(chǔ)的對(duì)象進(jìn)行排序

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方法,實(shí)現(xiàn)排序
    Collections.sort(al, new PersonHeight());
    
        //遍歷輸出
    for(Person p:al)
      System.out.println(p.getName());
  }
}


附加:

//對(duì)日期進(jìn)行排序
/**
 * 如果o1小于o2,返回一個(gè)負(fù)數(shù);如果o1大于o2,返回一個(gè)正數(shù);如果他們相等,則返回0;
 */
@Override
public int compare(Step o1, Step o2) {
  Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
  Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
  
  //對(duì)日期字段進(jìn)行升序,如果欲降序可采用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的外部的, 此時(shí)我們的Person類的結(jié)構(gòu)不需要有任何變化。
兩種方法各有優(yōu)劣, 用Comparable 簡(jiǎn)單, 只要實(shí)現(xiàn)Comparable 接口的對(duì)象直接就成為一個(gè)可以比較的對(duì)象,但是需要修改源代碼, 用Comparator 的好處是不需要修改源代碼, 而是另外實(shí)現(xiàn)一個(gè)比較器, 當(dāng)某個(gè)自定義的對(duì)象需要作比較的時(shí)候,把比較器和對(duì)象一起傳遞過去就可以比大小了, 并且在Comparator 里面用戶可以自己實(shí)現(xiàn)復(fù)雜的可以通用的邏輯,使其可以匹配一些比較簡(jiǎn)單的對(duì)象,那樣就可以節(jié)省很多重復(fù)勞動(dòng)了。

相關(guān)文章

最新評(píng)論

平果县| 汉中市| 固始县| 曲阳县| 炎陵县| 云龙县| 营山县| 乃东县| 西昌市| 祁连县| 南丹县| 桂林市| 阆中市| 临洮县| 津市市| 南京市| 林甸县| 东丰县| 墨竹工卡县| 杭锦旗| 元朗区| 洛扎县| 苍山县| 哈尔滨市| 南昌市| 博湖县| 津市市| 锡林郭勒盟| 桃江县| 平凉市| 凌源市| 高要市| 页游| 许昌县| 哈巴河县| 桃园市| 湖州市| 富源县| 全椒县| 嘉祥县| 双柏县|