1. 程式人生 > >Comparable與Comparator的區別

Comparable與Comparator的區別


     Java的Comparator和Comparable當需要排序的集合或陣列不是單純的數字型時,通常可以使用Comparator或Comparable,以簡單的方式實現物件排序或自定義排序。

 一、Comparator  強行對某個物件collection進行整體排序的比較函式,可以將Comparator傳遞給Collections.sort或Arrays.sort。

介面方法:

1  int compare(T o1, T o2);

案例實現:

 1 import java.util.Comparator;
 2 import java.util.HashMap;
3 4 public class Pair implements Comparator<String> { 5 6 HashMap<String, Integer> base_map; 7 8 public Pair(HashMap<String, Integer> base_map) { 9 this.base_map = base_map; 10 } 11 @Override 12 public int compare(String arg0, String arg1) {
13 if (!base_map.containsKey(arg0) || !base_map.containsKey(arg1)) { 14 return 0; 15 } 16 if (base_map.get(arg0) < base_map.get(arg1)) { 17 return 1; 18 } else if (base_map.get(arg0) == base_map.get(arg1)) { 19 return 0;
20 } else { 21 return -1; 22 } 23 } 24 25 26 }

二、Comparable 
強行對實現它的每個類的物件進行整體排序,實現此介面的物件列表(和陣列)可以通過Collections.sort或Arrays.sort進行自動排序。 
介面方法:

1  public int compareTo(T o);

案例程式碼比較年齡:

 1 class TestAge implements Comparable<Object>{
 2 
 3         private int age;
 4         
 5         public TestAge(int age){
 6             this.age=age;
 7         }
 8         @Override
 9         public int compareTo(Object o) {
10              return this.age -((TestAge)o).age ;
11         }
12         
13     }

三、Comparator和Comparable的區別

一個類實現了Camparable介面則表明這個類的物件之間是可以相互比較的,這個類物件組成的集合就可以直接使用sort方法排序。 
Comparator可以看成一種演算法的實現,將演算法和資料分離,Comparator也可以在下面兩種環境下使用: 
1、類的設計師沒有考慮到比較問題而沒有實現Comparable,可以通過Comparator來實現排序而不必改變物件本身 
2、可以使用多種排序標準,比如升序、降序等

相關推薦

java ComparableComparator介面的區別

public class MyTest { public static strictfp void main(String[] args) { String[] arr = {"bbbb","aaa","cc"}; /* * 利用String預設

淺談ComparableComparator區別

package com.list.customsort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import ja

ComparableComparator區別

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

ComparableComparator源碼分析

doc 同時 inf 兩個 span ase err 需要 ren package java.lang; import java.util.*; /** * This interface imposes a total ordering on the objects

似懂非懂的ComparableComparator

pan sort 編譯 pre pos family 應該 可能 ret jdk1.8.0_41 一知半解寫代碼, 集合排序用個啥。 抄起鍵盤胡亂打, 似懂非懂最可怕。   Comparable與Comparator都是用於集合的排序,對於大多數人來說Compa

Java中ComparableComparator區別小結

回到頂部一、Comparable簡介   Comparable是排序介面。若一個類實現了Comparable介面,就意味著該類支援排序。實現了Comparable介面的類的物件的列表或陣列可以通過Collections.sort或Arrays.sort進行自動排序。   此外,實現此介面的物件可以用作有序對映

Java中常用的比較器ComparableComparator

在公司實習了一段時間發現自己有些基礎知識理解的不是很清楚,今天把比較器的部分簡單總結一下! 有不對的歡迎指正! 需要為多個物件排序時必須設定規定的排序規則,排序規則可以通過比較器進行設定。Java提供兩種比較常用的比較器:Comparable和Compara

ComparableComparator淺析

  今天博主在翻閱TreeMap的原始碼,發現其鍵必須是實現Comparable或者Comparator的介面時產生了一些興趣,比如在TreeMap中的put方法分別對Comparable和Comparator介面分別進行處理。那麼疑問就來了,Comparabl

ComparableComparator的升序降序

Comparable介面 public interface Comparable<T> { int compareTo(T other); } 當呼叫x.compareTo(y)時,根據返回的整數值來確定x與y的位置,當返回值為正整數時,x在y後面。可

Comparable Comparator 兩個介面的作用

在我的印象裡,對於陣列排序,最簡單的方法就是使用Arrays.sort(陣列a);它也使我理所應當的認為:Arrays這個類完全實現這個sort的方法,而實際上並非如此,先看下sort的原型:public static <T extends Comparable<

ComparableComparator區別Comparator升序降序實現

Comparable與Comparator的區別 可參考: http://blog.csdn.net/mageshuai/article/details/3849143 總結: 1) 用 Comparator 是策略模式(strategy design

ComparableComparator區別 :Java 類的比較

size 兩種 邏輯 簡單 用戶 代碼 比較 nts 定義 Comparable: 用於類內部的比較, ex: public class Persion implements Comparable {..比較Person的大小..},person現在是可以比較大小的

【Java】ComparableComparator接口的區別

包含 第一個 入參 pareto blog 等於 compare 排序。 tor   Java提供了只包含一個compareTo()方法的Comparable接口。這個方法可以個給兩個對象排序。具體來說,它返回負數,0,正數來表明已經存在的對象小於,等於,大於輸入對象。  

java ComparableComparator接口區別

什麽 eset int origin image clas 新建 rate http Comparable 簡介 Comparable 是排序接口。 若一個類實現了Comparable接口,就意味著“該類支持排序”。 即然實現Comparable接口的類支持排序,假設現在

Java原始碼系列(1):ComparableComparator區別

在將Comparable和Comparator區別之前,先補充一個知識點。 先看程式碼: public class Person<T> {   private T id;   public T getId() {     retur

Java - comparablecomparator區別和用法

最近遇到一個問題、需要對List中的物件進行排序。無腦寫程式碼的解決方案是:取出來排序。當然這不符合我們程式設計師的追求。 Java中有兩個介面專門用於排序、比較。它們就是comparable和comparator。也有人稱之為內部比較器和外部比較器。 內部比較器 comparable:它重

ComparableComparator區別

概要:   Comparable和Comparator都是用於比較資料的大小的,實現Comparable介面需要重寫compareTo方法,實現Comparator介面需要重寫compare方法,這兩個方法的返回值都是int,用int型別的值來確定比較結果,在Collections工具類中有一個排序方法sor

Java中類的比較排序方法(應用Comparable介面Comparator介面)

引言 在平時寫Java的程式的時候,如果要進行一些基本型別的變數的比較,可以很方便得呼叫’Math.max()’、Math.min()等方法,如果要對陣列或者列表進行排序,也可以用Arrays.sort()和Collections.sort()等已經封裝好的方法來進行。但是,如果是一個自

ComparableComparator原始碼分析對比

Comparable使用  Comparable只是一個簡單的介面, public interface Comparable<T> { public int compareTo(T o); } 使用如下: public class Person imp

比較器ComparatorComparable的簡單區別

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