首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Comparator 接口實作與排序實戰範例

     編輯:Java 相關知識

前言

在 Java 開發中,當我們需要對集合或陣列中的自訂物件進行排序時,實作 Comparator 介面是最靈活的方式。本文將透過一個快遞物流追蹤的實際場景,完整示範如何實作比較器、處理日期排序,以及在單元測試中驗證排序結果。

實體類別設計:物流節點 Step

首先定義代表快遞處理節點的實體類別,包含處理時間與地點兩個核心屬性:

package com.ljq.entity;

public class Step {
    private String acceptTime = "";
    private String acceptAddress = "";

    public Step() {}

    public Step(String acceptTime, String acceptAddress) {
        this.acceptTime = acceptTime;
        this.acceptAddress = acceptAddress;
    }

    // Getter/Setter 方法省略...
}

實作 Comparator 介面:依日期排序

建立專門的比較器類別,將字串時間轉換為 Date 物件後比較,支援升序與降序切換:

package com.ljq.entity;

import java.util.Comparator;
import java.util.Date;
import com.ljq.util.UtilTool;

public class StepComparator implements Comparator<Step> {
    @Override
    public int compare(Step o1, Step o2) {
        Date acceptTime1 = UtilTool.strToDate(o1.getAcceptTime(), null);
        Date acceptTime2 = UtilTool.strToDate(o2.getAcceptTime(), null);
        
        // 升序:較早的時間排在前面
        if (acceptTime1.after(acceptTime2)) return 1;
        return -1;
        
        // 若需降序,可改用 before 方法
        // if (acceptTime1.before(acceptTime2)) return 1;
        // return -1;
    }
}

單元測試驗證排序結果

使用 JUnit 與 Collections.sort 進行實際測試:

package junit;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import com.ljq.entity.Step;
import com.ljq.entity.StepComparator;

public class StepComparatorTest {
    @Test
    public void sort() throws Exception {
        List<Step> steps = new ArrayList<>();
        // 此處應添加測試資料...
        
        StepComparator comparator = new StepComparator();
        Collections.sort(steps, comparator);
        
        if (steps != null && steps.size() > 0) {
            for (Step step : steps) {
                System.out.println("地點:" + step.getAcceptAddress());
                System.out.println("時間:" + step.getAcceptTime());
            }
        }
    }
}

關鍵點總結

  • 介面實作:實作 Comparator<T> 並覆寫 compare 方法
  • 日期比較:建議先將字串轉為 Date 或 LocalDateTime 再比較,避免字串比較錯誤
  • 排序穩定性:Collections.sort 為穩定排序,相同元素相對位置不變
  • 工具類依賴:範例中使用 UtilTool.strToDate,實際專案建議使用 DateTimeFormatter (Java 8+)

掌握 Comparator 介面,即可靈活處理各種複雜排序需求,是 Java 開發者必備的核心技能之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved