package pack2;
import java.util.*;
public class Student {
public static void main(String[] args) {
Student student = new Student();
student.Student11();
student.Teache(); }

public void Teache(){
Teacher t = new Teacher();
t.setAge(35);
t.setName("肖老师");
t.setSex("男");
t.run();

}

public void Student11(){
List<Student1> list = new ArrayList<Student1>();
Student1 s1 = new Student1();
s1.setId(1);
s1.setName("巫妖王");
s1.setScore(100);
s1.setAge(127);
list.add(s1);
Student1 s2 = new Student1();
s2.setId(2);
s2.setName("阿拉斯");
s2.setScore(13);
s2.setAge(34);
list.add(s2);
Student1 s3 = new Student1();
s3.setId(3);
s3.setName("关羽");
s3.setScore(55);
s3.setAge(77);
list.add(s3);
// Collections.sort(list);
Collections.sort(list,Collections.reverseOrder());   //降序
for(Student1 s:list){
System.out.println(s.toString());
}


}}
/*-------------------------------------------------------------------------------------------*/package pack2;
public class Student1 implements Comparable{ private String name;
private double score;
private int age;
private int Id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return Id;
}
public void setId(int Id) {
this.Id = Id;
}
public boolean equals(Object o){
Student1 s = (Student1)o;
if(this.getId() == s.getId()){
return true;
}else{
return false;
}

}
public int compareTo(Object o) {
Student1 s = (Student1)o;
if(this.getScore() < s.getScore()){
return 1;
}else{
return 0;
}
}
public String toString(){
return this.getName()+"的年龄是:"+this.getAge()+
           "   成绩是:"+this.getScore();
}
public int hashCode(){
return this.getId()+this.getName().hashCode();
}
}出来的他的 成绩 和 年龄应该是按照降序的方式排列的啊  为什么没什么效果过啊  请大牛指点  谢谢

解决方案 »

  1.   

    请注意Comparable接口的compareTo方法: 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。大于的时候返回正整数,然后你再反序才能达到你的效果把你的compareTo方法改下
      

  2.   

    额  还是不太明白  今天学得不怎么样   对Comparable   和CompareTo   这两个接口的方法  不太明白 能提个过分的要求么 能具体的把代码修改下么  给我具体的  我才好理想   谢谢啊
      

  3.   

    我今天写的升序 降序 都这样写的 ArrayList<Integer> ar = new ArrayList<Integer>();
    ar.add(3);
    ar.add(2);
    ar.add(1);
    // ar.add(1);
    Collections.sort(ar); //升序

    Iterator it = ar.iterator();
    while(it.hasNext()){
    System.out.println(it.next());

    }
    System.out.println("********************************");
    Collections.sort(ar,Collections.reverseOrder());   //降序
    for(Integer i:ar){
    System.out.println(i);
    }改用CompareTo这个接口 就有点模糊了  
      

  4.   


    public int compareTo(Object o) {
    Student1 s = (Student1) o;
    if (this.getScore() < s.getScore()) {//小于的时候返回负数
    return -1;
    } else if(this.getScore()>s.getScore())//大于的时候返回正数
    {
    return 1;
    }else //等于返回0
    {
    return 0;
    }
    }
      

  5.   

    这么说吧,Collections.sort(ar);回调用你的ar数组里面的包含对象的compareTo方法进行排序。
    具体他是这么调用的,你可以不管,但是你的compareTo 方法要写对,也就是你所需求的排序方案 就可以了。
    我上次好像帮你写了一个,没看懂吗?
      

  6.   

    谢谢啊  gentleboy2009  感觉现在有点眉目了   本人初学者
      

  7.   

    有两种方式的。
    请看我的博客:Comparator和Comparable在排序中的应用和区别。
    http://blog.csdn.net/iisgirl/article/details/7269833