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 o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现C...
  • ghui23
  • ghui23
  • 2016-07-29 22:02
  • 4467

java中compareTo和compare方法之比较

java中compareTo和compare方法之比较 compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,...

java中compareTo和compare方法之比较

java中compareTo和compare方法之比较  这两个方法经常搞混淆,现对其进行总结以加深记忆。 compareTo(Object o)方法是java.lang.Co...

String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)

String类字符串比较大概有4种方法:Compare(),CompareTo(), CompareOrdinal()和Equals(). Compare()方法是CompareTo()的静态版本.而...

String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)

String类字符串比较大概有4种方法:Compare(),CompareTo(), CompareOrdinal()和Equals(). Compare()方法是CompareTo()的静态版本.而...

【转】java ==、equals、compareTo、compare、sort在比较上的应用

关于java语言中的比较: 1、         ==是运算符,equals、compareTo是方法。 2、        &#...

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

在今天做的LeetCode的题中有两道都出现了利用接口实现对象的排序,两题的相关链接: 1.利用comparable接口对对象排序 2.利用comparator接口实现排序 由于之前都没接触过这两...

Java集合排序之compareTo&compare 接口 compareable & comparator

区别: 相同:comparable 和 Comparator 都是用来实现集合中的排序的(不是集合实现了这两接口,是集合里装的东西会去实现这两个接口) 区别: Comparable是在集...

Java中的equals(),==,compareTo()和compare()

Java中的equals(),==,compareTo()和compare() 首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较...

Java编程之TreeSet排序两种解决方法(1)元素自身具备比较功能,元素需要实现Comparable接口覆盖compare(2)创建根据自定义Person类的name进行排序的Comparator

TreeSet还具有可以对集合中的元素进行指定顺序的排序的功能。 这个功能实现的基本原理就是,当存放元素的时候进行比较,比较之后再存入。对于普通的字符串它可以完美的实现排序功能,但当是自定义类的时候就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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