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

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

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

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

  public class User implements Comparable {
    int id;
    String name;

    public User(int id, String name) {
      this.id = id;
      this.name = name;
    }

    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 COMPARATOR = new Comparator() {
public int compare(User o1, User o2) {
return o1.compareTo(o2);//运用User类的compareTo方法比较两个对象
}
}; public static void main(String[] args) {
ArrayList student = new ArrayList();
User user1 = new User(1,"yueliming");
User user2 = new User(2,"yueliming"); Collections.sort(student, COMPARATOR);//用我们写好的Comparator对student进行排序
for(int i=0;i){
System.out.println(student.get(i).getId());
}
}
}

java中compareTo和compare方法之比较的更多相关文章

  1. java中compareTo和compare方法之比较,集合中对象的比较

    前言 转自:http://www.cnblogs.com/yueliming/archive/2013/05/22/3092576.html (这里做了一些小改动) 一直一来对集合中对象的比较方案,有 ...

  2. 【Java】Java中常用的String方法

    本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...

  3. java中substring的使用方法

    java中substring的使用方法 str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str ...

  4. Java中Set的contains()方法

    Java中Set的contains()方法 -- hashCode与equals方法的约定及重写原则 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashCode() a ...

  5. [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较

    java中清空StringBuffer的方法,我能想到的有4种: 1. buffer.setLength(0);  设置长度为0 2. buffer.delete(0, buffer.length() ...

  6. java中BorderLayout的使用方法

    相关设置: 使用BorderLayout布局上下左右中布局5个按键,单击中间的那个按键时就关闭窗口 代码: /**** *java中BorderLayout的使用方法 * 使用BorderLayout ...

  7. Java中Set的contains()方法——hashCode与equals方法的约定及重写原则

    转自:http://blog.csdn.net/renfufei/article/details/14163329 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashC ...

  8. java中equals和hashCode方法随笔二

    前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...

  9. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

随机推荐

  1. [C++]C++标准里 string和wstring

    typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 前者string是常用类型, ...

  2. MultiSelectComboBox(二)

    1. MainWindow.xaml <Window x:Class="MultiSelectDemo.MainWindow"         xmlns="htt ...

  3. Unity Shader中自定义枚举类型

    效果 脚本: Properties { _MainTex ("Texture", 2D) = "white" {} [Enum(Enum1,,Enum2,)]_ ...

  4. HashMap, HashTable, CurrentHashMap的区别

    转载:http://www.jianshu.com/p/c00308c32de4 HashMap vs ConcurrentHashMap 引入ConcurrentHashMap是为了在同步集合Has ...

  5. SharePoint自动化系列——Add/Remove "Record" from items

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 目的:批量的将SharePoint items变成records或者将records变成普通的it ...

  6. hdu 3826

    Squarefree number Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  7. XMLHttpRequest 2.0与FileReader接口的方法

    jsonpd的实现: var jsonp = function (options) { var url = options.url, params = options.params || {}, ca ...

  8. ListView Animation

    简单介绍一下4种动画效果方式AnimationSet set = new AnimationSet(false); Animation animation = new AlphaAnimation(0 ...

  9. 【Java】ServerSocket的学习笔记

    公司有本<Java网络编程>一直闲置在书架上,反正我对Socket方面不太懂,今天跟着书学习一番. > 参考的优秀书籍 <Java网络编程> --中国电力出版社 > ...

  10. CAShapeLayer 与贝塞尔曲线

    一 CAShapeLayer 简介 1,CAShapeLayer继承至CALayer,可以使用CALayer的所有属性 2,CAShapeLayer需要与贝塞尔曲线配合使用才有意义:单独使用毫无意义 ...