java中Comparable实现对象的比较

简介: /* class A implements Comaprable{ } 那么 A x = new A(); 类关系图 Object o = A; Object Compa...
/*
class A implements Comaprable<A>{
}
那么 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<Object>)o1).compareTo((Student)o2);
	((Comparable<XXX>)o1).compareTo((YYY)o2);
	如果想写泛型那么 XXX 要么是同一类型,要么XXX是YYY的父类!因为我们强转的Comparable是比较XXX类型数据的,
	而YYY类型满足上面的条件才能成功向上转型为XXX类型!
*/


class Person implements Comparable<Person>{
   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<Student>{
     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<Object>)o1).compareTo((Student)o2);
			 
		     return ((Comparable)o1).compareTo((Student)o2);
   }
}

  

目录
相关文章
|
27天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
37 0
|
1天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
3天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
5 0
|
7天前
|
Java
Java中如何克隆一个对象?
【4月更文挑战第13天】
15 0
|
9天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
13天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
46 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
19天前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
17 2
|
27天前
|
Java
Java常用封装Base对象
Java常用封装Base对象
8 0
|
1月前
|
Java
【Java】通过Comparator比较器的方式给对象数组排序
【Java】通过Comparator比较器的方式给对象数组排序
11 0
|
1月前
|
Java
【Java】重写compareTo()方法给对象数组排序
【Java】重写compareTo()方法给对象数组排序
12 0