源码仅用于测试,请勿用于商用。源码来自网络,如有侵权,请联系我下架。
Java 中的Comparator和Comparable

1. 前言

上一文 简单对 java.util.Comparator 进行了说明,今天我们来看看另一个和它非常类似的接口 java.lang.Comparable

2. Comparable

Comparable 接口同样只有一个抽象方法 int compareTo(T o),其规则和Comparatorint compare(T o1, T o2)类似。虽然它也可以看作一个函数式接口,但是 Java 8 中并没有将它标记为函数式接口。说明设计者并不希望开发者将它作为函数式接口来使用。不然就偏离了设计意图,就像下面输入一个字符串返回该字符串的长度。

// 符合语法但是不符合设计意图的操作
Comparable<String> comparable = String::length;

通常情况下Comparable 希望被作为对象的一个特性来表达该对象的实例之间是相互比较的。比如电影有按照年份进行比较的特性。

class Movie implements Comparable<Movie> { 
    private double rating; 
    private String name; 
    private int year; 

    // Used to sort movies by year 
    public int compareTo(Movie m){ 
        return this.year - m.year; 
    } 
}

Comparable 通常用于自然排序,也就是元素本身是可比较的。

3.Comparator vs Comparable

ComparatorComparable 很相似,但是它们也是有一些不一样的地方的,主要表现在:

  • 视角不同,Comparable 通常是对象自带的比较属性而 Comparator 通常是作为“第三方”来比较。
  • 通常 Comparable需要被对象实现来作为特性使用,而Comparator 更像是策略。
  • 一个位于 java.lang 包下 ,一个在 java.util 下,这从侧面也证明了第一条。

4. 总结

总而言之,如果对象的排序需要基于自然顺序(它本身是可比较的),则使用 Comparable,而如果需要根据业务来对不同属性进行排序,请使用 Comparator

阅读全文
资源下载
下载价格免费
使用用途仅限于测试、实验、研究为目的,禁止用于一切商业运营,本团队不承担使用者在使用过程中的任何违法行为负责所有源码请自测!不保证你源码完整性有效性所有源码都是全网搜集
原文链接:https://www.bcbccb.cn/4618.html,转载请注明出处。 免责声明:本资源并未取得原始权利人的授权,不可商用,仅可用于学习分析底层代码,CSS等,禁止用于商业行为。如因擅自商用引起的相关纠纷及法律责任,由使用人全部承担。支持正版,人人有责,请于下载后24小时内删除,谢谢支持!
1
Cocos系列情怀源码多套精美UI界面皮肤切换全国600子游戏(带控制)
Cocos系列情怀源码多套精美UI界面皮肤切换全国600子游戏(带控制)
刚刚 有人购买 去瞅瞅看

站点公告

本站所提供的源码(主题/插件/应用源码)等资源仅供学习交流

禁止使用商业用途,否则产生的一切后果将由下载用户自行承担!

有部分资源为网上收集或仿制而来,若侵犯了您的合法权益,请来信通知我们.

目前会员大酬宾,终身会员现价299金币。近期调整价格

赶快加入,机会不等人! 立即参与

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录

zh_CNChinese