闲说: Java 中Comparable 和 Comparator 的区别
共同点
- Comparable 和 Comparator 他们都可以实现集合的排序功能;
区别
- Comparable 被实现类实现后, 需要重写compareTo方法, 方可使用Collections/Arrays工具类提供的排序方法进行排序;
- Comparator 被实现类实现后, 也可以重写compare方法, 这个方法虽然能返回两个对象的大小关系,但是没有和其他排序工具进行关联;
- Comparator 提供使用匿名内部类的实现方式实例化一个比较器对象, 作用是支持集合对象的实例方法sort(),从而达到对集合的排序目的;
代码如下:
public class Test {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("tom", 23));
students.add(new Student("jerry", 55));
students.add(new Student("jack", 80));
students.add(new Student("jane", 45));
students.sort((s1, s2) -> s1.getAge() - s2.getAge());
System.out.println(students);
}
}
其中,Student类并未实现Comparable接口, 所以无法使用Collections/Array的sort方法进行集合排序 --- 这点很重要. 所以只能用实现一个比较器对象的方式进行排序了.
所以从这一点可以看出, Comparable主要是对于设计类时使用, 当我们无法对类进行修改时, 我们可以使用Comparator的方式实现相同的目的;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构