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