java的compareto方法是谁的方法

 我来答
ifeilong
2016-09-12 · TA获得超过8068个赞
知道大有可为答主
回答量:1187
采纳率:100%
帮助的人:801万
展开全部

compareTo(Object o) 方法是java.lang.Comparable<T>接口中的方法,



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


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());
        }
    }
}
康熙转世
2016-09-12 · TA获得超过6839个赞
知道大有可为答主
回答量:4325
采纳率:85%
帮助的人:2929万
展开全部
楼主您好
是java.lang.Comparable接口的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rappant
2016-09-12
知道答主
回答量:17
采纳率:0%
帮助的人:9.3万
展开全部
Comparable 接口定义的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leoking633
2016-09-12 · TA获得超过254个赞
知道小有建树答主
回答量:388
采纳率:50%
帮助的人:134万
展开全部
compareble接口
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式