以下类是实现一个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]);
}
}
}
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]);
}
}
}
但是从哪里传进来啊?好像没有哪里显示出来有调用此方法啊?
public int compareTo(Object o) {
int rvi=((tct)o).i;
return (i <rvi?-1:(i==rvi?0:1));
}
int rvi=temp.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");
Arrays类的sort方法默认是根据元素的自然顺序对指定对象数组按升序进行排序。
类的 compareTo 方法被称为它的自然比较方法。因此必须实现Comparable接口的compareTo方法才能进行sort
否则会出现ClassCastException异常
2.关于int rvi=((tct)o).i的解释
因为int compareTo(T o)中使用了泛型,T可以表示任意类的实现对象。这里你将参数类型设置为了Object,
因此要转化为txt类型的对象,才能取到子类中的成员变量。理解了多态这个地方自然可以理解。
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);
}
}
}
这个实现就是比较两个tct的i值
o是object的,所以要先强制转化成tct类型
然后取出来i赋值给rvi