• 技术文章 >Java >java教程

    详细描述Java Comparator Vs Comparable的区别

    黄舟黄舟2017-03-14 11:56:00原创797


    一. Comparator 与 Comparable 相同点


    二. Comparator 与 Comparable 不同点


    实现 Comparable 接口方式:

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

      此时,我们可以使用 Collections.sort( personList ) 进行排序。


    实现 Comparator 接口方式:

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

      此时,我们可以使用 Collections.sort(personList,new PersonComparator()) 进行排序。


    三. 总结

    所以,就代码可扩展性角度而言,使用实现 Comparator 接口的方式去实现容器内元素的排序会更好一些。 

    看下面例子:

    public class HonorPerson extends Person{
         private String name;     private int age;     private STring degree;
    }

      此处,HonorPerson 类不能再次实现 Comparable<HonorPerson>接口,因为泛型不允许这么做,换句话说,HonorPerson 类只能使用 Person 类的比较方式,而不能再定义自己的比较方式。

    public class PersonComparator implements Comparator<Person>{}
    public class HonorPersonComparator implements Comparator<HonorPerson>{}

      此处,HonorPerson 与 Person 各有各的比较方式,互不影响,互不冲突。

    以上就是详细描述Java Comparator Vs Comparable的区别的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Java 数组代码实例综述 下一篇:Java 迭代器的代码实例详解
    Web大前端开发直播班

    相关文章推荐

    • 详细整理java枚举的使用总结• 详细介绍Java桥接模式• 一起聊聊Java常用数据类型的输入输出• 带你搞懂JAVA反射机制(总结分享)• 详细解析Java反射机制原理和几种Class获取方式

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网