【java】comparator接口与Comparable接口的区别

1. 概述

Comparator 和 Comparable都是java的一个接口, 并且是用来对自定义的class比较大小的。

2. Comparable

Comparable 定义在 Person类的内部,子类需要实现compareTo()方法:

public class Person implements Comparable {
     String name;
     int age
     public int compareTo(Person another) {
          int i = 0;
          i = name.compareTo(another.name); // 使用字符串的比较
          if(i == 0) { // 如果名字一样,比较年龄, 返回比较年龄结果
               return age - another.age;
          } else {
               return i; // 名字不一样, 返回比较名字的结果.
          }
     }
}
  

这时我们可以直接用 Collections.sort( personList ) 对其排序了.

3. Comparator

Comparator 是定义在Person的外部的, 此时我们的Person类的结构不需要有任何变化,子类需要实现compare()方法:

class PersonComparator implements Comparator { 
     public int compare(Person one, Person another) {
          int i = 0;
          i = one.name.compareTo(another.name); // 使用字符串的比较
          if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果
               return one.age - another.age;
          } else {
               return i; // 名字不一样, 返回比较名字的结果.
          }
     }
}
  

使用 Collections.sort( personList , new PersonComparator()) 可以对其排序

4. 总结

comparator接口与Comparable都是接口,需要有子类实现它们,并且需要实现各自的抽象方法,抽象方法的内部逻辑基本一致,都要返回-1 、0 、1方便排序。

两种方法各有优劣,:

  • 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码
  • 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器,灵活度更大。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值