
本文详解如何通过实现 comparable 接口,使 complaint 类支持自然排序,并使用 collections.sort() 对 list
在 Java 中对自定义对象列表(如 List
✅ 步骤一:实现 Comparable 并定义 id 比较逻辑
public class Complaint implements Comparable{ private int id; private String state; public Complaint(int id, String state) { this.id = id; this.state = state; } public int getId() { return id; } public String getState() { return state; } @Override public int compareTo(Complaint other) { // 直接委托 Integer.compare() —— 安全、简洁、避免溢出 return Integer.compare(this.id, other.id); } @Override public String toString() { return "Complaint{id=" + id + ", state='" + state + "'}"; } }
? 关键提示:优先使用 Integer.compare(a, b) 而非手动 if-else 或 a - b(后者可能因整数溢出导致错误结果)。该方法返回负数、零或正数,完全符合 Comparable 合约。
✅ 步骤二:使用 Collections.sort() 进行排序
import java.util.*;
public class SortExample {
public static void main(String[] args) {
List complaints = new ArrayList<>();
complaints.add(new Complaint(1, "inregistrata"));
complaints.add(new Complaint(3, "solutionata"));
complaints.add(new Complaint(2, "solutionata"));
System.out.println("原始列表: " + complaints);
// 升序排序(自然顺序)
Collections.sort(complaints);
System.out.println("升序后: " + complaints);
// 降序排序:可反转升序结果,或使用 Comparator.reverseOrder()
Collections.reverse(complaints);
System.out.println("降序后: " + complaints);
// ✅ 更优雅的降序写法(无需修改原列表顺序):
// complaints.sort(Comparator.reverseOrder());
}
} 输出示例:
SiteStar V2.7版功能说明:增加和改善功能1、站点基本设置中增加地址栏图标上传。2、调整文章、产品按后台顺序值从大到小进行排序显示。3、新增留言模块自定义留言项功能,方便各种网站留言表单需求。4、下载模块中,下载类型新增外部链接方式。5、友情链接、在线客服模块,新增排序字段,可调整显示顺序。6、新增走马灯按后台顺序值从大到小进行排序显示。7、增强公告模块设置滚动速度。8、产品列表显示方式
原始列表: [Complaint{id=1, state='inregistrata'}, Complaint{id=3, state='solutionata'}, Complaint{id=2, state='solutionata'}]
升序后: [Complaint{id=1, state='inregistrata'}, Complaint{id=2, state='solutionata'}, Complaint{id=3, state='solutionata'}]
降序后: [Complaint{id=3, state='solutionata'}, Complaint{id=2, state='solutionata'}, Complaint{id=1, state='inregistrata'}]⚠️ 注意事项与进阶建议
- 空值安全:若 id 可能为 null(如包装类型 Integer),需先判空,改用 Objects.compare(this.id, other.id, Integer::compareTo)。
-
多字段排序:若需先按 id、再按 state 排序,可链式调用:
return Integer.compare(this.id, other.id) != 0 ? Integer.compare(this.id, other.id) : this.state.compareTo(other.state); -
不修改原类?用 Comparator:若无法修改 Complaint 源码,可外部定义 Comparator:
complaints.sort(Comparator.comparingInt(Complaint::getId)); complaints.sort(Comparator.comparingInt(Complaint::getId).reversed());
- Java 8+ 推荐写法:list.sort(...) 比 Collections.sort(list) 更直观,且支持 ArrayList 等支持随机访问的列表高效排序。
掌握 Comparable 与 Comparator 的协同使用,是 Java 集合排序的基石能力——既保障代码可读性,又兼顾性能与扩展性。









