程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中完成Comparable和Comparator對象比擬

Java中完成Comparable和Comparator對象比擬

編輯:關於JAVA

Java中完成Comparable和Comparator對象比擬。本站提示廣大學習愛好者:(Java中完成Comparable和Comparator對象比擬)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中完成Comparable和Comparator對象比擬正文


當須要排序的聚集或數組不是純真的數字型時,平日可使用Comparator或Comparable,以簡略的方法完成對象排序或自界說排序。

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 這個對象曾經幫我們完成了 Comparable接口 , 所以我們的 Person 假如想排序, 也要完成一個比擬器。

一. 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);
    
        //挪用sort辦法,完成排序
    Collections.sort(al, new PersonHeight());
    
        //遍歷輸入
    for(Person p:al)
      System.out.println(p.getName());
  }
}


附加:

//對日期停止排序
/**
 * 假如o1小於o2,前往一個正數;假如o1年夜於o2,前往一個負數;假如他們相等,則前往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類的外部。
Comparator 是界說在Person的內部的, 此時我們的Person類的構造不須要有任何變更。
兩種辦法各有好壞, 用Comparable 簡略, 只需完成Comparable 接口的對象直接就成為一個可以比擬的對象,然則須要修正源代碼, 用Comparator 的利益是不須要修正源代碼, 而是別的完成一個比擬器, 當某個自界說的對象須要作比擬的時刻,把比擬器和對象一路傳遞曩昔便可以比年夜小了, 而且在Comparator 外面用戶可以本身完成龐雜的可以通用的邏輯,使其可以婚配一些比擬簡略的對象,那樣便可以節儉許多反復休息了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved