java排序方式對比

意必固我_LRL發表於2020-07-25

儘量使用使用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;
                }
            }
        });

    }



}

 

相關文章