1. 程式人生 > >比較器Comparator 和 Comparable的簡單區別

比較器Comparator 和 Comparable的簡單區別

    1,簡介

   最近在刷題的時候需要用到對自定義的類進行排序,於是想到了實現比較器介面,發現有comparator和conparable兩個比較器介面,具體分析一下兩者的區別。

   例如現在有一個自定義的類,

class Score{
  public int score;
  public int time;
  
	public int getScore() {
	return score;
}

public void setScore(int score) {
	this.score = score;
}

public int getTime() {
	return time;
}

public void setTime(int time) {
	this.time = time;
}

	public Score(int score, int time) {
		super();
		this.score = score;
		this.time = time;
	}
	
	
}
如果對一個物件陣列進行排序
Score[] score=new Score[n];
Arrays.sort(score);
這樣是沒法實現的,而對基本的資料型別可以這樣排序是因為其都實現了Comparable<T>介面

例如

public final class Integer extends Number implements <strong>Comparable<Integer></strong> {


public final class String
    implements java.io.Serializable, <strong>Comparable<String></strong>, CharSequence {
所以這裡的Score物件必須先實現自己的比較器才能用上述類似的方式進行排序

2,比較

    (1).Comparator 和 Comparable都是java中的內部比較器介面,都是用來實現對一個自定義的類進行排序

    (2). 不同的是實現Comparable介面是定義在類的內部,比較程式碼需要嵌入類的內部結構中

          Comparator 實現在類的外部,單獨實現第一個比較器,不需要對原來的類進行結構上的變化,屬於無侵入式的。

  具體到上面的例子

     Comparable<T>內部侵入式實現比較器

class Score implements Comparable<Score>{
  public int score;
  public int time;
  
	public int getScore() {
	return score;
}

public void setScore(int score) {
	this.score = score;
}

public int getTime() {
	return time;
}

public void setTime(int time) {
	this.time = time;
}

	@Override
	public int compareTo(Score o) {
		if(this.time>o.time) return 1;
		else if(this.time==o.time) return 0;
		else return -1;
	}

	public Score(int score, int time) {
		super();
		this.score = score;
		this.time = time;
	}
} 
然後在主類中直接比較 Arrays.sort(score);

Comparator <T>無侵入式實現比較器,只需要單獨寫一個比較器實現類ScoreComparator

class ScoreComparator implements Comparator<Score>{

	@Override
	public int compare(Score o1, Score o2) {
		if(o1.time>o2.time) return 1;
		else if(o1.time==o2.time) return 0;
		else return -1;
	}	
}
然後在主類中帶入比較器類Arrays.sort(score, new ScoreComparator());

相關推薦

比較Comparator Comparable簡單區別

    1,簡介    最近在刷題的時候需要用到對自定義的類進行排序,於是想到了實現比較器介面,發現有comparator和conparable兩個比較器介面,具體分析一下兩者的區別。    例如現在

java中Comparator Comparable區別

true public arr ins ride err instance ural code 1、Comparable的代碼如下: public interface Comparable<T> { public int compareTo(T o);

ComparatorComparable區別

簡介 在Java中,Comparable與Comparator兩個介面都是用來做比較的。 Java環境:JDK1.8 Comparable Comparable介面就是用於給類提供預設比較功能的。 Comparable可以認為是一個內比較器,很多類都會實現這個介

(The difference between Comparator and Comparable)ComparatorComparable區別

來源於 https://blog.csdn.net/zhushuai1221/article/details/51760663 in view of https://blog.csdn.net/zhushuai1221/article/details/51760663 原始碼(sou

類的可比較性Comparable比較Comparator

string fault nts font nal 返回值 extends 方式 ret 1. Comparable Comparable源碼如下: public interface Comparable<T> { public int compareT

Java Map集合利用比較Comparator根據KeyValue的排序

TreeMap排序 根據Key進行排序 Map的根據key排序需要用到TreeMap物件,因為它是預設按照升序進行輸出的,可以使用比較器compareTo對它進行降序排序,Comparator可以對集合物件或者陣列進行排序的比較器介面,實現該介面的public compa

【Java學習筆記】45:優先順序佇列PriorityQueue比較Comparator

模擬程序排程時的優先數法和簡單時間片輪轉法,前者可以為程序設定以優先數PRIORITY為優先順序,為了更好地併發,每次獲得處理機後優先數減少3而重新選取。 在簡單輪轉法中則僅僅是一個普通佇列,按照FIFO的方式出隊獲得處理機。 如果要使用比較器Compara

ComparatorComparable比較

當需要排序的集合或陣列不是單純的數字型時,通常可以使用Comparator或Comparable,以簡單的方式實現物件排序或自定義排序。 一、Comparator 強行對某個物件collection進行整體排序的比較函式,可以將Comparator傳遞給Collection

ComparatorComparable之間的區別

簡介 Comparable介面 該介面對每個實現它的類的物件強加了排序規則。該排序稱之為自然排序(natural ordering)。方法public int compareTo(T o)是自然排序的排序方法。 實現了comparable介面

Java中字串比較方法equals()equalsIgnoreCase()的區別

1. equals() equals( )是比較兩個字串是否相等,它的一般表示式如下: /** * Compares this string to the specified object. The result is {@code * true} if and o

linux下的兩種編輯vivim的區別

vi   vim是vi的加強版。語法加亮 vim 命令模式,命令列模式,編輯模式 vim 命令模式 字元操作: i  當前插入 I  行首插入 a  當前字元之後插入 A  行尾插入 o  下一行插入 O  上一

Delphi TThread CreateThread 簡單區別

(KK_DDj 原創) 一、寫程式碼的時候碰到一個執行緒記憶體洩漏的問題: 描述: 建立執行緒: Delphi 自帶的 TThread 類 強制結束: TerminateThread 結果 : 會造成記憶體洩漏。 建立執行緒 : CreateThread 強制結束:Terminate

ComparatorComparable的詳解

一、引言 之前在一次機試時候,考察到了Java中比較。但是答得不是很好,加之最近在學習二叉樹、紅黑數這些,更不離不開比較、排序,所以在這裡把Java中的比較好好總結下。 二、Comparable 1. 介紹 Comparable是一個介面,是一個內比較器(至於為

比較Comparator的底層結構淺談

      查API可知,介面 Comparator<T>存在於java.util包中,可以知道此介面所處的包是非常實用,我們的比較器見名知意,肯定是用於比較的,在Java1.6的API中有這麼一句話:public interface Comparator<

一個例子看清楚JQuery子元素選擇children()find()的區別

最近在我們的hybrid app專案開發中定位出了一個問題,通過這個問題了解下JQuery選擇器find()和children()的區別。問題是這樣的:我們的混合app是一個單頁面應用(main.html),邏輯上的頁面是通過專案自定義的.mspl檔案(其實就是html檔案

內嵌,J2SE常用類,Comparator Comparable

內嵌 當一個final函式被呼叫通常Java編譯器可以通過呼叫方法的編譯程式碼直接內嵌來備份子程式的位元組碼,這是什麼意思? 1.首先要明白一點,呼叫一個函式除了函式本身的執行時間之外,還需要額外的時間去尋找這個函式(類內部有一個函式簽名和函式地址的對映表)。所以減少函式呼

如何理解java裡的ComparatorComparable

Comparator,又名比較器,是為了比較兩個物件的大小而抽象出的一個介面。在排序的時候常需要實現這個介面來定製比較規則。 但是很多人用的時候不清楚該如何使用這個介面,下面我就講一下這個介面的正確使用方法!這個接口裡有一個必須實現的方法(因為java8之後有的接口裡的部分方法是有預設實現的,所以不再是

比較Comparator

Comparator介面 java中有內建的排序,Arrays.sort(),現在我有一個Student類,類中三個成員變數name,id,age,我現在想以age作為參考進行升序排序,應該如何做,很簡單,只需要自己定義一個類實現Comparator介面即可 i

比較comparator,compare函式升序、降序原始碼分析

0、前言   一直想不明白,compare函式如何通過返回值,就確定是升序還是降序呢,於是乎決定好好的先看看原始碼。   下面的程式碼實現了對自己寫的Students類按照年齡升序的排序,就是通過對實現comparator介面,重寫compare的方法,實現

jquery中選擇childrenfind的區別

children()和find()的異同: 1> children及find方法都用是用來獲得element的子elements的,兩者都不會返回 text node,就像大多數的jQuery方法一樣。  2> children方法獲得的僅僅是元素一下級的子