zoukankan      html  css  js  c++  java
  • Java中Comparable与Comparator的区别

    相同

    • Comparable和Comparator都是用来实现对象的比较、排序
    • 要想对象比较、排序,都需要实现Comparable或Comparator接口
    • Comparable和Comparator都是Java的接口

    区别

    • Comparator位于java.util包下,而Comparable位于java.lang包下
    • Comparable接口的实现是在类的内部(如 String、Integer已经实现了Comparable接口,自己就可以完成比较大小操作),Comparator接口的实现是在类的外部(可以理解为一个是自已完成比较,一个是外部程序实现比较)
    • 实现Comparable接口要覆盖compareTo方法, 在compareTo方法里面实现比较
    public class Student implements Comparable {
         String name;
         int age
         public int compareTo(Student another) {
              int i = 0;
              i = name.compareTo(another.name); 
              if(i == 0) { 
                   return age - another.age;
              } else {
                   return i; 
              }
         }
    }
       这时我们可以直接用 Collections.sort( StudentList ) 对其排序了.(
       **只需传入要排序的列表**)
    
    • 实现Comparator需要覆盖 compare 方法
    public class Student{
         String name;
         int age
    }
    class StudentComparator implements Comparator { 
         public int compare(Student one, Student another) {
              int i = 0;
              i = one.name.compareTo(another.name); 
              if(i == 0) { 
                   return one.age - another.age;
              } else {
                   return i;          }
         }
    }
       Collections.sort( StudentList , new StudentComparator()) 可以对其排序(
       **不仅要传入待排序的列表,还要传入实现了Comparator的类的对象**)
    

    总结

    • 如果比较的方法只要用在一个类中,用该类实现Comparable接口就可以。
    • 如果比较的方法在很多类中需要用到,就自己写个类实现Comparator接口,这样当要比较的时候把实现了Comparator接口的类传过去就可以,省得重复造轮子。这也是为什么Comparator会在java.util包下的原因。
  • 相关阅读:
    SpringMVC统一异常处理
    How to convert BigDecimal to Double in spring-data-mongodb framework
    DHCP动态主机配置协议
    你所听到的技术原理、技术本质到底是什么?
    前端技术及开发模式的演进,带你了解前端技术的前世今生
    金三银四,如何征服面试官,拿到Offer
    何谓多租户模式 ?
    骄傲的技术人,技术是你的全部吗?
    自我剖析,坚持有多难?
    从官方文档去学习之FreeMarker
  • 原文地址:https://www.cnblogs.com/linbingdong/p/5300720.html
Copyright © 2011-2022 走看看