Java 对象比较方式:equals、Comparable 与 Comparator

发布时间:2026/9/27 9:45:20
Java 对象比较方式:equals、Comparable 与 Comparator 文章目录对象的比较1.覆写基类的 equals2.基于 Comparable 接口类的比较3.基于比较器比较三种方式的对比对象的比较我们就拿这个来举例publicclassCard{publicStringsuit;publicintrank;publicCard(Stringsuit,intrank){this.suitsuit;this.rankrank;}publicstaticvoidmain(String[]args){Cardcard1newCard(hongtao,5);Cardcard2newCard(heitao,5);}1.覆写基类的 equals当我们要判断两张牌是否相同时需要比较的内容是suit 以及 rank 两个属性。因此在比较是否相同上我们通常用进行比较而在两个实例化的 card 中则使用euqals方法。publicclassCard{publicStringsuit;publicintrank;publicCard(Stringsuit,intrank){this.suitsuit;this.rankrank;}// 比较牌面、花色是否相同Overridepublicbooleanequals(Objecto){if(onull||getClass()!o.getClass())returnfalse;Cardcard(Card)o;returnrankcard.rankObjects.equals(suit,card.suit);}OverridepublicinthashCode(){returnObjects.hash(suit,rank);}}重写 equals、hashCode 方法在 IDEA 上可以使用快捷键AltIns找到equals 和 hashCode默认下一步即可2.基于 Comparable 接口类的比较对用用户自定义类型如果要想按照大小与方式进行比较时在定义类时实现Comparable接口即可然后在类中重写compareTo方法。publicclassCardimplementsComparableCard{publicStringsuit;publicintrank;publicCard(Stringsuit,intrank){this.suitsuit;this.rankrank;}// 大小比较OverridepublicintcompareTo(Cardo){returnthis.rank-o.rank;}}因此我们在只比较牌面大小的时候可以通过重写compareTo方法即可。其 return 有两种写法returnthis.rank-o.rank;returnInteger.compare(this.rank,o.rank);// 更安全该方法的返回值含义有以下publicinterfaceComparableE{// 返回值:// 0: 表示 this 指向的对象小于 o 指向的对象// 0: 表示 this 指向的对象等于 o 指向的对象// 0: 表示 this 指向的对象大于 o 指向的对象intcompareTo(Eo);}3.基于比较器比较当用户自定义比较器的时候实现这个接口并重写 compare 方法例如在该例子中我想比较花色我们可以在 Card 类之外再创建一个类去实现该接口。减少对类的嵌入comapre 方法内如何比较可自定义classSuitComparatorimplementsComparatorCard{publicintcompare(Cardo1,Cardo2){returno1.suit.compareTo(o2.suit);}}注意Comparator 是 java.util 包中的泛型接口类使用时必须导入对应的包。该比较器的方法返回值如下publicinterfaceComparatorT{// 返回值:// 0: 表示 o1 指向的对象小于 o2 指向的对象// 0: 表示 o1 指向的对象等于 o2 指向的对象// 0: 表示 o1 指向的对象等于 o2 指向的对象intcompare(To1,To2);}三种方式的对比特性Object.equalsComparableComparator比较目的判断相等定义默认顺序定义多种/临时顺序比较结果booleanint (负, 0, 正)int (负, 0, 正)修改位置类内部类内部实现接口类外部独立比较器灵活性低中一种规则固定高多种规则切换典型方法a.equals(b)a.compareTo(b)c.compare(a, b)以上是我关于Java的笔记分享感谢你读到这里这也是我学习路上的一个小小记录。希望以后回头看时能看到自己的成长~

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询