java中Comparable实现对象的比较

/*
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);
   }
}
时间: 2024-10-29 20:56:40

java中Comparable实现对象的比较的相关文章

string-关于java中String的对象问题

问题描述 关于java中String的对象问题 String s = ""abc"";String s1 =""a""+""b""+""c"";看有关书籍介绍说这上面两句代码内存中创建了4个对象,但是也有些资料上说是只创建了一个对象,因为编译器会把字符串常量在编译过程中直接相加?还有就是 String a = ""abc&quo

java中是不是只有对象可以接收数据?

问题描述 java中是不是只有对象可以接收数据? java中是不是只有对象可以接收数据,类需要实例化成对象才可以接收数据,用什么方法发送数据呢 解决方案 如果是同一个进程,就自己通过监听,或消息等机制,如果跨进程,tcp,udp等传输协议都可以 解决方案二: 把对象保存到请求的Scope中,或者定义全局的常量,还有dto也可以传递数据. 解决方案三: 基本数据类型,数组集合等等都可以接收数据,本质上都是给内存中的数据一个引用.传参方式很多,构造器,带参方法等等.web中一般就get.post

java中的context对象、request对象、response对象都可以存放什么数据?

问题描述 java中的context对象.request对象.response对象都可以存放什么数据? java中的context对象.request对象.response对象在向应用服务器发送请求的过程中都会用到,分别可以存放哪些数据呢?求大神解答,不胜感激! 解决方案 [NET]随时随地访问DB连接,Page对象,Session对象, Request对象, Response对象等Response对象Response对象 解决方案二: 一般来讲存放的是javabean,当然javabean可以

关于java中尝试改变对象的引用 ,这是老师出的一道题 麻烦大家了!

问题描述 关于java中尝试改变对象的引用 ,这是老师出的一道题 麻烦大家了! 6.尝试改变对象的引用 change (Object j){ o=new Obj; } 不知道这是什么意思,请各位指教.麻烦各位说一下意思,谢谢! 解决方案 就是将引用指向新的Object对象 解决方案二: 写完全了吗?题就是这样? 解决方案三: 你老师是要你体会多态么? 解决方案四: Obj是啥?没写全吧? 解决方案五: 刚刚打错了 正确的是这样 change (Object o) { o=new Obj; } 不

java中变量和对象之间的关系问题

问题描述 java中变量和对象之间的关系问题 java中变量和对象之间的关系问题 是对象属于变量,还是变量属于对象 它们是充要的还是充分不必要还是必要不充分的 我不是上面的数学逻辑属于适合不适合描述对象和变量之间的关系 解决方案 一般来说,变量类型会叫基本类型,比如Integer等,还有就是对象变量,就是引用对象的变量. 对象中可以定义变量.

js接收并转化Java中的数组对象的方法_javascript技巧

在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进行内容的转化,后来发现不可以,网上说js与java没有桥接的东西,所以呢: 我的解决方案是:在action层,将java的对象数组转化为Json串,而在js中,再把json转化为数组对象. 1.将java的对象数组转化为Json串: 要用到两个类: net.sf.json.JSONObject ne

解析Java中的String对象的数据类型

  解析Java中的String对象的数据类型     [摘要] 本文将全面解析Java中的String对象的数据类型.[关键字] Java 技巧   1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String()和new String("")都是申明一个新的空字符串,是空串不是null: 3. String str="

浅谈java中对集合对象list的几种循环访问_java

java中对集合对象list的几种循环访问的总结如下  1 经典的for循环  public static void main(String[] args) { List<String> list = new ArrayList(); list.add("123"); list.add("java"); list.add("j2ee"); System.out.println("=========经典的for循环======

javascript实现类似java中getClass()得到对象类名的方法_javascript技巧

本文实例讲述了javascript实现类似java中getClass()得到对象类名的方法.分享给大家供大家参考.具体如下: 在javascript中没有能够返回特定类型名的函数 如一个对象 console.log(obj); 得到的是[object HtmlTableCellElement]如果想要一个函数能够返回HtmlTableCellElement js中默认没有这样的函数 可以自己实现一个 var getObjectClass = function (obj) { if (obj &&a