求各位大神帮解决一道题目

图片说明

package com.package1;

import java.util.*;

public class StuScore {

public static void main(String[] args) {

    TreeSet<Student> ts=new TreeSet<Student>(new Com());
    //添加元素进去
    for(int i=20070301,j=1;i<=20070330;i++,j++)
    {
        ts.add(new Student(i,"同学"+j,"男",(int) (40*Math.random()+60)));
    }

    //迭代循环取出
    Iterator<Student> it=ts.iterator();
    while(it.hasNext())
    {
        Student o1=it.next();
        System.out.println("学号:"+o1.num+"  "+"姓名:"+o1.name+"  "+"性别:"+o1.sex+"  "+"成绩:"+o1.grade);

    }

}

}
//学生类
class Student
{
int num;
int grade;
String name;
String sex;

public Student(int num, String name, String sex, int grade)
{
    this.num=num;
    this.name=name;
    this.sex=sex;
    this.grade=grade;
}

}
class Com implements Comparator
{

@Override
public int compare(Object o1, Object o2) {

    Student s1=(Student) o1;
    Student s2=(Student) o2;
    if(s1.grade>s2.grade)
        return 1;
    if(s1.grade<s2.grade)
        return -1;
    if(s1.grade==s2.grade)
    {
        return new Integer(s1.num).compareTo(new Integer(s2.num));
    }
    return 0;
}

}

打印结果:
学号:20070307 姓名:同学7 性别:男 成绩:62
学号:20070314 姓名:同学14 性别:男 成绩:68
学号:20070324 姓名:同学24 性别:男 成绩:68
学号:20070305 姓名:同学5 性别:男 成绩:70
学号:20070303 姓名:同学3 性别:男 成绩:71
学号:20070319 姓名:同学19 性别:男 成绩:71
学号:20070323 姓名:同学23 性别:男 成绩:74
学号:20070328 姓名:同学28 性别:男 成绩:75
学号:20070310 姓名:同学10 性别:男 成绩:76
学号:20070325 姓名:同学25 性别:男 成绩:77
学号:20070329 姓名:同学29 性别:男 成绩:77
学号:20070308 姓名:同学8 性别:男 成绩:78
学号:20070321 姓名:同学21 性别:男 成绩:78
学号:20070322 姓名:同学22 性别:男 成绩:79
学号:20070326 姓名:同学26 性别:男 成绩:80
学号:20070318 姓名:同学18 性别:男 成绩:83
学号:20070320 姓名:同学20 性别:男 成绩:83
学号:20070316 姓名:同学16 性别:男 成绩:85
学号:20070311 姓名:同学11 性别:男 成绩:86
学号:20070330 姓名:同学30 性别:男 成绩:86
学号:20070312 姓名:同学12 性别:男 成绩:87
学号:20070313 姓名:同学13 性别:男 成绩:87
学号:20070309 姓名:同学9 性别:男 成绩:88
学号:20070327 姓名:同学27 性别:男 成绩:89
学号:20070315 姓名:同学15 性别:男 成绩:93
学号:20070317 姓名:同学17 性别:男 成绩:93
学号:20070301 姓名:同学1 性别:男 成绩:94
学号:20070306 姓名:同学6 性别:男 成绩:96
学号:20070304 姓名:同学4 性别:男 成绩:97
学号:20070302 姓名:同学2 性别:男 成绩:98

参考:http://blog.csdn.net/superhill/article/details/7837106

哈哈,特别喜欢看这种考基础的题。这道题主要考点有两个:
一、Comparable接口
二、集合里的排序方法

首先按照题目来看你肯定需要一个学生类,来放你打印的这些属性(学号啊,姓名啊,巴拉巴拉)。那么考点一就来了,当一个学生A和一个学生B来比较排序
你是按照什么标准来排序呢。你肯定不是年龄大的在前面对吧(神经病啊,题干清清楚楚说的按分数来排序),so....Comparable接口的实现是势在必行
了。
接着就是考点二了,java.util.Collections这个类提供了一些关于集合类常用的静态方法包括:对List容器的排序sort(),逆向排序reverse() ,and so on...
Map的排序话我觉得楼上caozhy这位兄台的连接已经讲的很详细。

finally{
刚巴得!小伙子
}

图片说明

图片说明

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeMap;

public class Test2{

public static void main(String[] args){

    ArrayList<Student>al=new ArrayList<Student>();
    for(int i=20070301,j=10;i<=20070330;i++,j++)
    {
        al.add(new Student(i,(int) (40*Math.random()+60), "同学"+j));
    }

// Iteratorit=al.iterator();
//

// while(it.hasNext()){
//

// Student s1=it.next();
// System.out.println(s1);
// }
//ArrayList排序借助Collections中的sort()方法实现。
Collections.sort(al, new Sortbygrade());
for(Student sd:al)
System.out.println(sd);

}

}

//学生类
class Student{
int num,grade;
String name;

//构造函数
public Student(int num,int grade,String name){

    this.num=num;
    this.name=name;
    this.grade=grade;
}

public String toString(){

    return "学号:"+this.num+"\t"+"姓名:"+this.name+"    "+"成绩:"+this.grade;
}

}

class Sortbygrade implements Comparator{

@Override
public int compare(Object o1, Object o2) {

    Student s1=(Student) o1;
    Student s2=(Student) o2;
    if(s1.grade>s2.grade)
        return 1;
    if(s1.grade<s2.grade)
        return -1;

// if(s1.grade==s2.grade)

    return 0;
}

}