java中compareTo和compare方法之比较

翻译 2015年07月06日 23:39:38

java中compareTo和compare方法之比较

这两个方法经常搞混淆,现对其进行总结以加深记忆。

  1. compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable<T>接口的,必须重写public int compareTo(T o)方法,比如MapReduce中Map函数和Reduce函数处理的 <key,value>,其中需要根据key对键值对进行排序,所以,key实现了WritableComparable<T>接口,实现这个接口可同时用于序列化和反序列化。WritableComparable<T>接口(用于序列化和反序列化)是Writable接口和Comparable<T>接口的组合;
  2. compare(Object o1,Object o2)方法是java.util.Comparator<T>接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。

下面我们写一来看看上面两个方法是怎么用的:

首先,写一个User类,代码如下:

复制代码
public class User implements Comparable<Object>{
    int id;
    String name;
    
    public User(int id,String name){
        this.id = id;
        this.name = name;
    }
    /*
     * Getters and Setters
    */
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
       
    @Override
    public int compareTo(Object o) {
        if(this ==o){
            return 0;            
        }
        else if (o!=null && o instanceof User) {   
            User u = (User) o; 
            if(id<=u.id){
                return -1;
            }else{
            return 1;
        }
    }else{
        return -1;
    }
}
}
复制代码

接下来,我们写一个测试类Test:

复制代码
public class Test{
    //编写Comparator,根据User的id对User进行排序
    private static final Comparator<User> COMPARATOR = new Comparator<User>() {
       public int compare(User o1, User o2) {
           return o1.compareTo(o2);//运用User类的compareTo方法比较两个对象       
      }
   };
    
    public static void main(String[] args) {
        ArrayList<User> student = new ArrayList<User>();
        User user1 = new User(1,"yueliming");
        User user2 = new User(2,"yueliming");
    
        Collections.sort(student, COMPARATOR);//用我们写好的Comparator对student进行排序
        for(int i=0;i<student.size();i++){
            System.out.println(student.get(i).getId());
        }
    }
}
复制代码

java中compareTo()和compare()方法的比较

方法的比较 1.compareTo(Object obj)方法是java.lang.Comparable接口中的方法, 当需要对类的对象进行排序时,该类需要实Comparable接口,必须重写pu...
  • u011031422
  • u011031422
  • 2017年07月04日 09:46
  • 345

关于comparator接口和comparable接口以及它们各自的方法compare()和compareTo()

在今天做的LeetCode的题中有两道都出现了利用接口实现对象的排序,两题的相关链接: 1.利用comparable接口对对象排序 2.利用comparator接口实现排序 由于之前都没接触过这两...
  • u011955072
  • u011955072
  • 2015年03月16日 00:45
  • 3563

比较运算符compareTo()、equals()、==之间的区别与应用总结

1、== 和 equals的区别:  ==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int  b= 10; a==b,返回为 ...
  • u012767369
  • u012767369
  • 2017年02月12日 16:51
  • 1266

Java中equals()、==、compareTo()的区别

== equals compareTo()
  • u012369153
  • u012369153
  • 2016年10月31日 14:17
  • 1180

java中的compareto方法的详细介绍

java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码 String a="a",b="b"; System.out.println(a.compareto(...
  • baidu_21578557
  • baidu_21578557
  • 2016年04月23日 16:49
  • 2471

Java String.compareTo()方法

Java String.compareTo()方法用法实例教程, 此方法如果这个字符串是等参数字符串那么​返回值0,如果这个字符串是按字典顺序小于字符串参数那么返回小于0的值,如果此字符串是按字典顺序...
  • litong09282039
  • litong09282039
  • 2015年05月30日 20:39
  • 4380

Java中compareTo()方法在不同字符串的各种情况

Java中compareTo()方法在不同字符串的各种情况
  • msllgx
  • msllgx
  • 2017年03月05日 15:55
  • 635

Java 关于重写compareTo方法

概述"当一个类实现类Comparable接口,此类就可以跟很多泛型算法(generic algorithm) 以及依赖于该接口 的集合实现(Collection implementation)进行协作...
  • u013591605
  • u013591605
  • 2017年07月17日 20:21
  • 1859

比较字符串CompareTo的用法及注意

 CompareTo用法 static void Main(string[] args)         {             string str = "1";       ...
  • u011702023
  • u011702023
  • 2016年03月02日 15:50
  • 5441

java String对象中‘==’,equals与compareTo函数的使用和区别

java String类中可能最让初学者容易混淆的li
  • xiongyangg
  • xiongyangg
  • 2014年10月10日 21:31
  • 1915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中compareTo和compare方法之比较
举报原因:
原因补充:

(最多只允许输入30个字)