1. 程式人生 > >Comparator和Comparable排序

Comparator和Comparable排序

Java API針對集合型別排序提供了兩種支援:

java.util.Collections.sort(java.util.List) 

java.util.Collections.sort(java.util.List, java.util.Comparator) 

第一個方法要求所排序的元素類必須實現java.lang.Comparable介面

第二個方法要求實現一個java.util.Comparator介面

java.util.Comparator介面與java.util.Comparable介面的區別:

 Comparator和Comparable相同的地方:

兩個都是java介面

用來對自定義class比較大小的

什麼是自定義class?比public class Person{ String name; int age }

當我們有這麼一個List,裡面包含Person物件時, 比如:

List<Person>mList=new ArrayList<Person>();

mList.add(new Person("zhangsan",1));

mListt.add(new Person("liming",2));

mList.add(new Person("wangwu",3));

這時我們不能直接使用Collections.sort(mList)

進行排序,因為Person類並沒有實現Comparable介面,除非這樣Person implement Comparable<Person>;但是Stirng卻是可以排序比如:

List<String>mList=new ArrayList<String>();

mList.add("a");

mList.add("b");

mList.add("c");

此時Collections.sort(mList)是可以將mList中的元素排序.

這是因為String已經實現了Comparable介面,看看String類原始碼下圖:

Comparable和Comparator

的區別:

Comparable定義在Person類的內部,也就是自身實現了這個介面

因為已經實現了比較器,那麼我們的Person現在是一個可以比較大小的物件,它的比較功能和String完全一樣,可以隨時隨地的拿來比較大小,因為Person現在自身就是有大小之分的。Collections.sort(List)可以得到正確的結果,看圖如下一目瞭然;

而Comparator是定義在Person類的外部的,也就是重新建立一個類實現了Comparator<Person>;

比如class Comparators implements Comparator<Person>{}這個比較器裡面按照自定義規則對Person的大小進行比較;這時通過Collections.sort(mList,new PersonCompartors())可以得到正確的比較結果,如下圖;

 ps:上面不論implement哪一個介面,都需要複寫compare(),引數不同而已,但是它們都是返回int型別的值,這個int值(這裡用a表示)只有三種情形;

a<0: 說明前面<後面

a=0: 說明前面=後面

a>0: 說明前面>後面

相關推薦

ComparatorComparable排序

Java API針對集合型別排序提供了兩種支援: java.util.Collections.sort(java.util.List)  java.util.Collections.sort(java

Arrays.sort排序方法以及ComparatorComparable介面的作用

有的時候需要對數組裡的element進行排序。當然可以自己編寫合適的排序方法,但既然Java包裡有自帶的Arrays.sort排序方法,在陣列元素比較少的時候為何不用?   Sorting an Array 1. 數字排序  int[] intArray = new i

TreeSet的排序兩種實現方式ComparatorComparable

TreeSet 條件 型別一樣 設計到排序 comparable是自然(可以修改類的情況下) comparator是定製(不可以修改類的情況下)優先順序更高  使用說明: 一般採用的是自然排序,但是當,不能對類進行修改時不得不採用comparator方法,下面的dem

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

ComparatorComparable的詳解

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

內嵌,J2SE常用類,Comparator Comparable

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

如何理解java裡的ComparatorComparable

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

比較器Comparator Comparable的簡單區別

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

ComparatorComparable比較

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

ComparatorComparable之間的區別

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

對集合中的元素進行排序,接口Comparator<T>Comparable<T>的使用

pub length 自定義 長度 public bsp imp ide 抽象類 關於比較排序比較的接口 或者是類有:java.lang.Comparable<T>接口, 一個抽象類通過實現這個接口可以進行自然排序,也就是一個如果一個自定義類通過implemen

Java Comparable排序介面Comparator比較器介面

       實現Comparable介面的類支援排序,假設現在存在“實現Comparable介面的類的物件的List列表(或陣列)”,則該List列表(或陣列)可以通過 Collections.so

Java中實現Comparable介面Comparator介面的排序演算法效率比較

在PAT Basic Level的真題中,有”德才論“這麼一題(點選可開啟題目)。 最開始我是構造了一個學生類,存放學生資訊,實現Comparator介面,遺憾的是,後臺測試時,每一個測試用例皆顯示程式執行超時。 public class Main ... class S

實現Comparator接口Comparable接口,以及Map按value排序 ,map遍歷

package oid ring add arraylist todo [] tint map() 繼承Comparator接口,重寫compare()方法 import java.util.ArrayList; import java.util.Arrays;

Lambda表示式增強版Comparator排序

1、概述 在這篇教程裡,我們將要去了解下即將到來的JDK 8(譯註,現在JDK 8已經發布了)中的Lambda表示式——特別是怎樣使用它來編寫Comparator和對集合(Collection)進行排序。 這篇文章是Baeldung上的“Java ——迴歸基礎”(“Java – Back t

Java8:Lambda表示式增強版Comparator排序

1、概述 在這篇教程裡,我們將要去了解下即將到來的JDK 8(譯註,現在JDK 8已經發布了)中的Lambda表示式——特別是怎樣使用它來編寫Comparator和對集合(Collection)進行排序。 首先,讓我們先定義一個簡單的實體類: pu

Java容器---Comparator介面Comparable介面

/** * created by yangyinglong at 20180517 * 排序方式的學習 * Comparator 和 Comparable 兩個介面的學習 */ import java.util.*; public class Comparator

Java8:Lambda表達式增強版Comparator排序

多條件 core 鏈接 要去 sta port 介紹 測試 enc 1、概述 在這篇教程裏,我們將要去了解下即將到來的JDK 8(譯註,現在JDK 8已經發布了)中的Lambda表達式——特別是怎樣使用它來編寫Comparator和對集合(Collection)進行排序。