在 Java 里,Comparator 本身并不能保证“稳定排序”,是否稳定取决于你使用的排序方法。
稳定排序:相等元素在排序后,原有相对顺序不变。
例如:
list = [ (2,"a"), (1,"b"), (2,"c") ]
按数字排序后:
(1,"b"), (2,"a"), (2,"c") // a 仍在 c 前面 ✅ 稳定
List.sort(Comparator)(推荐)list.sort(Comparator.comparingInt(Item::getNum));
✅ 这是最常用、最安全的方式
Collections.sort(List, Comparator)Collections.sort(list, comparator);
list.sort()Arrays.sort(Object[])Arrays.sort(array, comparator);
⚠️ 不建议用于需要稳定性的场景
有时候 两个元素 comparator 返回 0,但你想保持原顺序。
thenComparing 补充排序条件list.sort(
Comparator
.comparingInt(Item::getNum)
.thenComparingInt(Item::getIndex) // 原顺序索引
);
class Item {
int num;
int order; // 插入顺序
}
list.sort(
Comparator.comparingInt(Item::getNum)
.thenComparingInt(Item::getOrder)
);
| 方法 | 是否稳定 | 建议 |
|---|---|---|
List.sort(Comparator) |
✅ 稳定 | ⭐ 推荐 |
Collections.sort |
✅ 稳定 | ✅ |
Arrays.sort(Object[], Comparator) |
❌ 不稳定 | ⚠️ |
| 手动排序 | ❌ 一般不稳定 | ❌ |
如果你愿意,可以告诉我:
List / 数组)我可以给你更具体的代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。