String类下compareTo()与compare()方法比较

发布时间 - 2026-01-11 01:02:12    点击率:

String类下compareTo()与compare()方法比较

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

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>接口的组合;
判断字符串大小的依据是根据它们在字典中的顺序决定的。
如果参数字符串等于此字符串,则返回 0 值;
如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;
如果按字典顺序此字符串大于字符串参数,则返回一个大于 0 的值。

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());
    }
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# String类下compareTo()与compare()对比  # java  # 中compareTo()与compare()比较  # Java中替代equals  # compareTo和toString的方法  # java源码解析之String类的compareTo(String otherString)方法  # Java 基础:string中的compareTo方法  # 序列化  # 的是  # 是怎么  # 这两个  # 对其  # 希望能  # 重写  # 谢谢大家  # 于此  # 用我  # 写好  # 键值  # 实现了  # 看上面  # Map  # Reduce  # public  # int  # MapReduce  # Writable 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 智能起名网站制作软件有哪些,制作logo的软件?  千库网官网入口推荐 千库网设计创意平台入口  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  怎么用AI帮你设计一套个性化的手机App图标?  北京网站制作公司哪家好一点,北京租房网站有哪些?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何用AI帮你把自己的生活经历写成一个有趣的故事?  EditPlus中的正则表达式实战(6)  如何快速选择适合个人网站的云服务器配置?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何做网站制作流程,*游戏网站怎么搭建?  如何用PHP工具快速搭建高效网站?  网站制作免费,什么网站能看正片电影?  音响网站制作视频教程,隆霸音响官方网站?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  zabbix利用python脚本发送报警邮件的方法  三星、SK海力士获美批准:可向中国出口芯片制造设备  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  JavaScript如何实现类型判断_typeof和instanceof有什么区别  如何在香港免费服务器上快速搭建网站?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  大学网站设计制作软件有哪些,如何将网站制作成自己app?  网页设计与网站制作内容,怎样注册网站?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  想要更高端的建设网站,这些原则一定要坚持!  中国移动官方网站首页入口 中国移动官网网页登录  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Python文件流缓冲机制_IO性能解析【教程】  如何在阿里云香港服务器快速搭建网站?  Laravel怎么实现模型属性的自动加密  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何快速建站并高效导出源代码?