Java中对两个对象进行比较大小

在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));

  }

  }


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值