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

Java 線性表排序實戰:使用 Collections.sort 與 Comparator 實現多條件排序

     編輯:Java 程式設計入門

前言

在 Java 開發中,對集合進行排序是極為常見的需求。Java 集合框架提供了 Collections.sort() 靜態方法,配合 Comparator 介面,能夠靈活實現複雜的多條件排序邏輯。本文將通過一個完整的範例,演示如何對包含自定義對象的 List 進行排序。

核心 API 介紹

關鍵方法簽名:

public static <T> void sort(List<T> list, Comparator<? super T> c)

該方法會根據指定的比較器 c 所定義的順序,對列表進行原地排序。

步驟一:定義資料模型

首先建立一個 User 類別,包含使用者名稱與年齡兩個屬性,並提供完整的 Getter/Setter 方法:

package model;

/**
 * 使用者實體類別
 */
public class User {
    private String userName;
    private int userAge;

    public User() {}

    public User(String userName, int userAge) {
        this.userName = userName;
        this.userAge = userAge;
    }

    public String getUserName() { return userName; }
    public void setUserName(String userName) { this.userName = userName; }
    public int getUserAge() { return userAge; }
    public void setUserAge(int userAge) { this.userAge = userAge; }
}

步驟二:實現比較器邏輯

實現 java.util.Comparator<User> 介面,在 compare() 方法中定義排序規則:優先按姓名升序排列,姓名相同時再按年齡升序排列。

package util;

import java.util.Comparator;
import model.User;

/**
 * 使用者比較器:先比姓名,再比年齡
 */
public class ComparatorUser implements Comparator<User> {
    @Override
    public int compare(User u1, User u2) {
        // 先比較名字
        int flag = u1.getUserName().compareTo(u2.getUserName());
        // 若名字相同,則比較年齡
        if (flag == 0) {
            return u1.getUserAge() - u2.getUserAge();
        }
        return flag;
    }
}

步驟三:測試排序效果

在主程式中建立列表、插入測試資料、呼叫 Collections.sort() 並輸出結果:

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import util.ComparatorUser;
import model.User;

/**
 * 排序測試主類別
 */
public class TestApp {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();

        // 插入測試資料
        userList.add(new User("A", 15));
        userList.add(new User("B", 14));
        userList.add(new User("A", 14));

        // 執行排序
        Collections.sort(userList, new ComparatorUser());

        // 輸出結果
        for (User u : userList) {
            System.out.println(u.getUserName() + " " + u.getUserAge());
        }
    }
}

執行結果

A 14
A 15
B 14

可以看到,資料先按姓名(A 在 B 前),同名者再按年齡升序排列,完全符合預期。

總結

透過 Comparator 介面將比較邏輯與資料模型解耦,配合 Collections.sort(),即可輕鬆實現靈活、可複用的多條件排序。這種策略模式的應用,也是 Java 集合框架設計的經典體現。

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