以下类是实现一个comparable接口 进行排序 然后打印  但里面的compareTo方法运作原理我不懂,还有int rvi=((tct)o).i;这个表达式理解不了! 请高手指教
import java.util.*;
public class tct implements Comparable{
    int i,j;
    public tct(int c,int d){
        i=c;
        j=d;
    }
    public int compareTo(Object o) {
        int rvi=((tct)o).i;
        return (i<rvi?-1:(i==rvi?0:1));
     }
     public String toString(){
         return "(i)"+i+"(j)"+j+"  ";
     }    public static void main(String[] args) {
     tct[] f=new tct[10];
     Random r=new Random();
     for(int b=0;b<f.length;b++)
     {
         f[b]=new tct(r.nextInt(100),r.nextInt(100));
     }
        Arrays.sort(f);
       for(int e=0;e<f.length;e++)
       {
           System.out.print(f[e]);
       }
    }  
}

解决方案 »

  1.   

    针对接口编程啊,你实现了,Comparable,在用其他类的时候,比如Collections.sort(list),假设list里面都是tct对象,这时候在sort里面,他们都被转成Comparable类型,就可以排序了,比大小时根据你实现的comparTo方法来决定两个tct对象的大小int rvi=((tct)o).i; 把o转成tct了类型(传进来的参数是Object类型),访问属性i
      

  2.   


    但是从哪里传进来啊?好像没有哪里显示出来有调用此方法啊? 
    public int compareTo(Object o) { 
            int rvi=((tct)o).i; 
            return (i <rvi?-1:(i==rvi?0:1)); 
         } 
      

  3.   

    int rvi=((tct)o).i====tct temp = (tct)o;
    int rvi=temp.i;
      

  4.   

    int rvi=((tct)o).i;
    转换为类类型 public int compareTo(Object o) { 
            int rvi=((tct)o).i; 
            return (i <rvi?-1:(i==rvi?0:1)); 
         } 如果 int rvi=((tct)o).i; 
    改为int rvi=o.i; 你就懂了吧
    那么加上((tct)o).i;就是把o这个对象转换为tct类型了HttpSession session = request.getSession();
    session.setAttribute("i",i);
    String i = (String)session.getAttribute("i");
      

  5.   

    1.为什么要实现compareTo方法?
    Arrays类的sort方法默认是根据元素的自然顺序对指定对象数组按升序进行排序。
    类的 compareTo 方法被称为它的自然比较方法。因此必须实现Comparable接口的compareTo方法才能进行sort
    否则会出现ClassCastException异常
    2.关于int rvi=((tct)o).i的解释
    因为int compareTo(T o)中使用了泛型,T可以表示任意类的实现对象。这里你将参数类型设置为了Object,
    因此要转化为txt类型的对象,才能取到子类中的成员变量。理解了多态这个地方自然可以理解。
      

  6.   

    参看下面这个例子:
    import java.util.Comparator;
    import java.util.ArrayList; public class Demo{
     public static void main(String[] args){
      
      
      User u1 =new User("aaa",12);
      User u2 =new User("ddd",10);
      User u3 =new User("ccc",20);
      User u4 =new User("bbb",10);
      
      ArrayList arrayList = new ArrayList();
      arrayList.add(u1);
      arrayList.add(u2);
      arrayList.add(u3);
      arrayList.add(u4);
      
      Object[] users =arrayList.toArray();
      System.out.println ("排序前。");
      for (int i = 0; i<users.length; i++){
       System.out.println (users[i]);
      }
      System.out.println ("*******************************");
      System.out.println ("排序后。。");
      //把排序规则交给sort方法。该方法就回按照你自定义的规则进行排序
      
      java.util.Arrays.sort(users,new MyComparator());
      
      
      for (int i = 0; i<users.length; i++){
       System.out.println (users[i]);
      }
      
      
      
     }
    }class User{
     String name;
     int age ;
     
     public User(String name,int age){
      this.name  = name;
      this.age = age; 
     }
     
     public String toString(){
      return name+":::"+age;
     }
     
    }
    class MyComparator implements Comparator{
     public  int compare(Object  obj1, Object obj2 ){
      User u1 = (User)obj1;
      User u2 = (User)obj2;
      if(u1.age>u2.age){
       return 1;
      }else if(u1.age<u2.age){
       return -1;
      }else{
       //利用String自身的排序方法。
       //如果年龄相同就按名字进行排序
       return u1.name.compareTo(u2.name);
      }
      
      
     }

      

  7.   

      int rvi=((tct)o).i; 这个接口就是要实现里面的方法,实现这个接口才可以使用数组提供的sort排序
    这个实现就是比较两个tct的i值
    o是object的,所以要先强制转化成tct类型
    然后取出来i赋值给rvi