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;
}
}