java中comparable比较_java中Comparable实现对象的比较

本文通过示例解释了Java中如何使用Comparable接口来实现对象的比较。讲解了Comparable接口的作用,以及在ArrayList排序和Arrays.sort()方法中的应用。同时展示了Person和Student类如何实现Comparable接口,并提供了cmp方法进行对象比较。
摘要由CSDN通过智能技术生成

/*

class A implements Comaprable{

}

那么 A x = new A(); 类关系图

Object o = A; Object

Comparable c = A; | Comparable

A 实现了 Comparable 接口嘛 |-----|-----A

所以有 o instanceof A == true;

o instanceof Comparable == true;

例如ArrayList添加对象实例时,对象实例添加之后先向上转型为Object!内部用Object[]数组接收!

Arrays.sort()对Object排序的函数内部就是将 Object 向下转型为Comparable类型。

因为每个对象实现了Comparable接口,利用多态性,(Comparable)o1).compareTo(o2)将调用子类的compareTo()方法!

((Comparable)o1).compareTo((Student)o2);

((Comparable)o1).compareTo((YYY)o2);

如果想写泛型那么 XXX 要么是同一类型,要么XXX是YYY的父类!因为我们强转的Comparable是比较XXX类型数据的,

而YYY类型满足上面的条件才能成功向上转型为XXX类型!

*/

class Person implements Comparable{

String name;

int age;

Person(){

name = "";

age = 0;

}

Person(String name, int age){

this.name = name;

this.age = age;

}

public String toString(){

return name + "...." + age;

}

public boolean equals(Object o){

Person x = (Person)o;

return name.equals(x.name) && age==x.age;

}

public int compareTo(Person o){

if(name.compareTo(o.name)==0)

return o.age - age;

return o.name.compareTo(name);

}

}

class Student implements Comparable{

String name;

int age;

public Student(){

name = "";

age = 0;

}

public Student(String name, int age){

this.name = name;

this.age = age;

}

public int compareTo(Student o){

if(name.compareTo(o.name)==0)

return o.age - age;

return o.name.compareTo(name);

}

}

public class Test{

public static void main(String[] args){

Person p = new Person("fsf", 45);

Student s = new Student("faga", 20);

Student ss = new Student("fsfdfsf", 456);

Comparable xx = (Comparable)s;

System.out.println(xx);

cmp(s,ss);

}

public static int cmp(Object o1, Object o2){

//return ((Comparable)o1).compareTo((Student)o2);

return ((Comparable)o1).compareTo((Student)o2);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值