在Java中要想对两个对象进行比较大小,需要实现Comparable接口或Comparator接口。String类型的值之所以可以比较大小(汉字根据ANSI值的大小进行比较),是因为String类实现了Comparable接口。如果要比较的对象没有实现Comparable接口或Comparator接口而直接比较会报 java.lang.ClassCastException类型转换异常。

两个对象进行比较方法一:实现Comparable接口

  Person类是要比较的对象

  package com.lym.comparator;

  /**

  * 人类

  * 要使该类能进行比较,该类必须实现Comparable接口

  * @author Administrator

  *

  */

  public class Person implements Comparable{

  private String name;

  private int age;

  public Person() {

  super();

  }

  public Person(String name, int age) {

  super();

  this.name = name;

  this.age = age;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  @Override

  public String toString() {

  return "Person [name=" + name + ", age=" + age + "]";

  }

  //当前类按年龄由小到大排序

  //1和-1调换后就是按年龄由大到小排序的

  @Override

  public int compareTo(Person o) {

  if(o == null){

  throw new NullPointerException();

  }

  if(this.age>o.age){

  return 1;

  }else if(this.age<o.age){

  return 1;

  }else if(this.age=o.age){

  return 0;

  }

 }

方法二:实现Comparator接口实现Comparator接口与Comparable接口有什么区别吗?

答:Comparable接口 是在要比较的对象类创建的时候就实现了,也就是在项目上线之前就设计好了,大多数时候是采用这种方法。但是,有的时候项目已经上线了,此时我们还要对某个类进行比较,而此时该类还没有实现Comparable接口,为了遵守软件开发中“对扩展开放,对修改关闭”的原则,我们可以再定义一个比较器类,实现Comparator接口,这样我们就不会破坏要比较的类的原有结构了。自定义比较器类

package com.lym.comparator;

  import java.util.Comparator;

  /**

  * 自定义比较器类

  *

  * @author Administrator

  *

  */

  public class ComparatorDemo implements Comparator {

  @Override

  public int compare(Person2 o1, Person2 o2) {

  if (o1 == null || o2 == null) {

  throw new NullPointerException();// 空指针异常

  }

  if (o1.getAge() > o2.getAge()) {

  return 1;

  } else if (o1.getAge() < o2.getAge()) {

  return -1;

  }

  return 0;

  }

  }

  Person2类package com.lym.comparator;

  /**

  * 人类

  *

  * @author Administrator

  *

  */

  public class Person2 {

  private String name;

  private int age;

  public Person2() {

  super();

  }

  public Person2(String name, int age) {

  super();

  this.name = name;

  this.age = age;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  @Override

  public String toString() {

  return "Person2 [name=" + name + ", age=" + age + "]";

  }

  }

  对象比较器测试类package com.lym.comparator;

  import java.util.Arrays;

  /**

  * 对象比较器测试类

  * @author Administrator

  *

  */

  public class ComparableDemo {

  public static void main(String[] args) {

  String[] names = {"利亚","藤兰","泉彩","井空","岛爱","结衣"};

  Person[] persons = {

  new Person("泉彩",23),new Person("岛爱",25),

  new Person("藤兰",41),new Person("结衣",35),

  new Person("利亚",28),new Person("井空",32)

  };

  Person2[] persons2 = {

  new Person2("泉彩",23),new Person2("岛爱",25),

  new Person2("藤兰",41),new Person2("结衣",35),

  new Person2("利亚",28),new Person2("井空",32)

  };

  Arrays.sort(names);

  System.out.println(Arrays.toString(names));

  //实现Comparable接口

  Arrays.sort(persons);//按Person对象的age属性比较大小

  System.out.println(Arrays.toString(persons));//输出比较后的对象数组

  //自定义比较器,实现Comparator接口

  Arrays.sort(persons2);

  System.out.println(Arrays.toString(persons2));

  }

  }

Java中对两个对象进行比较大小相关推荐

  1. Java中对比两个对象中属性值[反射、注解]

    在Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较.如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪 ...

  2. 合并两个对象 java_在Java中合并两个对象列表8

    如果要实现equals和hashCode,那么这个方法就在Parent类中.在该类中添加类似的方法 @Override public int hashCode() { return Objects.h ...

  3. Java中的两个关键字——super、this

    Java中的两个关键字--super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...

  4. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

  5. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  6. 12月29日--Java中有关类与对象的学习记录

    1.12月29日第一课记录 Java中有关类与对象的学习记录 一.基本概念部分 1.类:具有相同.相似的属性.特征.行为方式以及功能的一类事物的总称 (举例:一类用户,如淘宝用户) 类是对象的模板 是 ...

  7. java中的类和对象(重点)超详细

    java中的类和对象 1.类与对象的初步认知 2.类和对象的实例化 3.类的成员 3.1.字段,属性,成员变量 3.2.方法 3.3.static 关键字 3.4.小结 4.封装 4.1.privat ...

  8. java中判断两个字符(或者字符串相等)

    string a,b;//两字符串 在java中判断两个字符(字符串)相等,用a.equals(b); if(a.equals(b)){ //如果相等,返回值为true }else{ //如果不相等, ...

  9. java中的equals()空对象的出错

    java中的equals()空对象的出错: String a = "abc"; //不是空对象boolean b = a.equals("abc"); //不会 ...

最新文章

  1. 如何理解numpy.nan_to_num
  2. 在Intelij IDEA中修改maven为国内镜像(阿里)
  3. 阿里云日志服务(ELK)
  4. Nvidia: Mx150 CUDA10安装驱动
  5. micropython 实时音频传输_在线实时合唱的实现原理与难点是什么?
  6. xcode10 自定义代码块
  7. 五分钟搭建 Flash 视频直播站
  8. 自学鄙视链顶端的王者
  9. python数据库操作批量sql执行_python 批量远程执行SQL SERVER 脚本
  10. mysql 主键B+Tree 3层存2000W行数据
  11. 神经网络Neural Networks概述
  12. access口 环路_交换机二层环路问题处理指南[苍松参考]
  13. AI_Cousera笔记(吴恩达)_开篇
  14. 离散数学第二版计算机系,离散数学 第2版
  15. 股票期货量化数据文档大全覆盖国内6大交易的史数据和实时行情
  16. c语言switch逻辑用语,第一章 第二节用逻辑用语.doc
  17. 一分钟快速了解边缘计算
  18. ## IDEA创建maven项目没有src目录问题解决
  19. 07年中国企业500强名单
  20. [Pandas] 相同分组条件下的特定列除第一行以外的值为空

热门文章

  1. 刘畅清华大学计算机学院,刘畅
  2. webuploader怎样上传文件夹
  3. Vue——vue3路由导航守卫及其写法
  4. seaborn小提琴图
  5. 调和级数发散的简短证明
  6. 手把手教你接入微信开放平台,实现网站拉起微信账号登录,从0开始详细记录
  7. 傅里叶变换的意义和理解(通俗易懂)[转]
  8. 团队作业第二次—团队展示
  9. 在校大学生/老师如何申请注册一家公司
  10. IKVM.NET的妙手偶得