儘量使用使用Comparator進行排序,
在java中,要想給資料進行排序,有兩種事項方式,
- 一種為實現Comparable介面,
- 一種是實現Comparator介面,
public interface Comparable
此介面強行對實現它的每個類的物件進行整體排序。這種排序被稱為類的自然排序,類的 compareTo 方法被稱為它的自然比較方法。
- 實現此介面的物件列表(和陣列)可以通過 Collections.sort(和 Arrays.sort)進行自動排序。
- 實現此介面的物件可以用作有序對映中的鍵或有序集合中的元素,無需指定比較器。
- int compareTo(T o)比較此物件與指定物件的順序。如果該物件小於、等於或大於指定物件,則分別返回負整數、零或正整數。
@FunctionalInterface
public interface Comparator
比較功能,對一些物件的集合施加了一個整體排序 。 可以將比較器傳遞給排序方法(如Collections.sort或Arrays.sort ),以便對排序順序進行精確控制。
- 比較器還可以用來控制某些資料結構(如順序sorted sets或sorted maps ),或對於不具有物件的集合提供的排序natural ordering ,
- 與Comparable不同,比較器可以可選地允許比較空引數,同時保持對等價關係的要求。
- int compare(T o1, T o2) 比較其兩個引數的順序。
package com.liruilong; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * @Description : 集合排序整理 * @Author: Liruilong * @Date: 2019/7/31 22:21 */ public class Compara implements Comparable<Compara>{ private Integer data; public Integer getData() { return data; } public void setData(Integer data) { this.data = data; } /** * @Author Liruilong * @Description public interface Comparable<T> * 此介面強行對實現它的每個類的物件進行整體排序。這種排序被稱為類的自然排序, * 類的 compareTo 方法被稱為它的自然比較方法。 * 實現此介面的物件列表(和陣列)可以通過 Collections.sort(和 Arrays.sort)進行自動排序。 * 實現此介面的物件可以用作有序對映中的鍵或有序集合中的元素,無需指定比較器。 * int compareTo(T o)比較此物件與指定物件的順序。 * 如果該物件小於、等於或大於指定物件,則分別返回負整數、零或正整數。 * @Date 22:54 2019/7/31 * @Param [o] * @return int **/ @Override public int compareTo(Compara o) { // (x == 1) ? -1 : ((x == 2) ? 0 : ((x == 3) ? 1:((x == 4) ? 3 : ))) 代替 if -else if。 return (this.data < o.data) ? -1 : ((this.data == o.data) ? 0: 1); } public interface Comparator<T> { int compare(T o1, T o2); } public static void main(String[] args) { List<Compara> comparaList = new ArrayList<>(); //方法一 集合元素實現了Comparable 介面,直接用工具類排序 Collections.sort(comparaList); // 方法二 在排序時將比較器傳入 Collections.sort(comparaList, (Compara o1, Compara o2) ->o1.compareTo(o2) ); //方法三,通過Comparator傳入一個比較器 comparaList.sort((Compara o1,Compara o2) ->o1.compareTo(o2)); comparaList.sort(new java.util.Comparator<Compara>() { /** * @Author Liruilong * @Description 針對一些本身沒有比較能力的物件(陣列)為它們實現比較的功能, * 所以它叫做比較器,是一個外部的東西,通過它定義比較的方式, * 再傳到Collection.sort()和Arrays.sort()中對目標排序, * 而且通過自身的方法compare()定義比較的內容和結果的升降序; * @Date 23:16 2019/7/31 * @Param [o1, o2] * @return int **/ @Override public int compare(Compara o1, Compara o2) { if (o1.getData()== o2.getData()){ return 0; }else if(o1.getData() < o2.getData()) { return -1; }else { return 1; } } }); } }