//创建学生对象
                  Student stu0 = new Student("student1", 10);
Student stu1 = new Student("student2", 30);
Student stu2 = new Student("student3", 20);
Student stu3 = new Student("student4", 50);
Student stu4 = new Student("student5", 40);
Student stu5 = new Student("student6", 22);
// 集合对象
List list = new ArrayList();
// 添加元素
list.add(stu0);
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
                  //创建学生对象时参数列表中的第一个参数为"姓名",第二个参数为:“年龄”
                  现在问题是我想通过学生“年龄”进行升序排序。请朋友们帮我看下怎么排?
                  

解决方案 »

  1.   

    1.Student的类实现Comparable 接口的compareTo方法
    2.用util包下的Collections类的类方法 sort(List list); 来排序
      

  2.   


    sort
    public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺
    序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素
    都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 
    ClassCastException)。
    此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。指定列表必须是可修改的,但不必是大小可调整的。该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则
    忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排
    序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生
    的 n2 log(n) 性能。 
    参数:
    list - 要排序的列表。 
    抛出: 
    ClassCastException - 如果列表包含不可相互比较 的元素(例如,字符串和整数)。 
    UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
    另请参见:
    Comparable--------------------------------------------------------------------------------sort
    public static <T> void sort(List<T> list,
                                Comparator<? super T> c)根据指定比较器产生的顺序对指定列表进行
    排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意 e1 和 e2 元
    素,c.compare(e1, e2) 不得抛出 ClassCastException)。
    此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽
    略合并)。此算法提供可保证的 n log(n) 性能。 指定列表必须是可修改的,但不必是可大小调整的。此实
    现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避
    免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。 参数:
    list - 要排序的列表。
    c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。 
    抛出: 
    ClassCastException - 如果列表中包含不可使用指定比较器相互比较 的元素。 
    UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
    另请参见:
    Comparator
      

  3.   

    import java.lang.Comparable;
    public class TestComparable implements Comparable<TestComparable>{
          private int age;
          private String name;
          public TestComparable(int age,String name){
           this.age=age;
           this.name=name;
          }
          public int compareTo(TestComparable t){  
           int cha=this.age-t.age;
          if(cha!=0) return cha;
          else return this.name.compareTo(t.name);
          }
         /* public boolean equals(Object obj){
           if(!(obj instanceof TestComparable)) return false;
           TestComparable tc=(TestComparable)obj;
           return (age==tc.age&&name.equals(tc.name));
          }
          public int hashCode(){
           int result=17;
           result=37*result+age;
           result=37*result+name.hashCode();
           return result;
          }*/
    }
      

  4.   

    发错了..
    import java.util.*;
    public class TestComparable {
    public static void main(String args[]){
    Student s1=new Student("ru1",45);
        Student s2=new Student("ru2",50) ;
        Student s3=new Student("ru3",10) ;
        Student s4=new Student("ru4",15) ;
        Student s5=new Student("ru",50) ;
        Student st[]={s1,s2,s3,s4,s5};
        Arrays.sort(st);
        for(Student s:st){
         System.out.println(s);
        }
    }

    }
    class Student implements Comparable<Student>{
        private String name;
        private int age;
        public Student(String name,int age){
         this.name=name;
         this.age=age;
        }
    public int compareTo(Student s) {
    int cha=this.age-s.age;
    if(cha!=0){
    return cha;
    }else{
    return this.name.compareTo(s.name);
    }

       /* public boolean equals(Object obj){
         if(!(obj instanceof Student)) return false;
         Student st=(Student)obj;
         return (age==st.age&&name.equals(st.name));
        }
        public int hashCode(){
         int result=17;
         result=37*result+age;
         result=37*result+name.hashCode();
         return result;
        
      }*/
        public String toString(){
         return "name:"+name+"      age:"+age;
        }
      }
      

  5.   

    为什么csdn出现这么多的  本来用百度可以解决的问题的呢!!!
      

  6.   

    To:yuzi13631138780
       这个方法可行,呵呵,谢了!
      

  7.   

    To:littlemonster
    如果让要比较的类实现了comparator接口就可以用srot()方法进行排序了。呵呵!可行,谢了。
      

  8.   

    To:r4141496091
       这个方法也可行,不过后来我通过实现comparator接口也实现了按学生年龄排序的功能。呵呵!谢谢了,这位朋友。