本帖最后由 刘文超 于 2013-1-3 15:42 编辑
lz你好,这个问题应该先按照Student类定义一个比较器,也就是按照成绩去比较学生。
而TreeSet的构造中就可以用一个比较器初始化的、之后集合的元素将按这个比较的方法来给我们对象排序。
下边是我的代码,运行能通过,得到目标结果,但肯定也有好多不适之处,大家共同学习,共同进步!- package com.itheima;
- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.TreeSet;
- public class Test10 {
- /**
- * 第十题:定义一个学生类, 需要有姓名, 年龄, 考试成绩三个成员属性,
- * 创建5个对象, 属性可为任意值.
- * 编程对这5个对象按成绩排序,并将结果输出。(提示,用TreeSet和Comparator实现)
- * @author 刘文超
- */
-
- public static void main(String[] args) {
- //定义一个集合,用于封装学生,传入一个比较器
- TreeSet<MyStudent> msSet=new TreeSet<MyStudent>(new MyComparator());
- //定义5个学生
- MyStudent ms1=new MyStudent("a",20,90);
- MyStudent ms2=new MyStudent("b",20,80);
- MyStudent ms3=new MyStudent("c",20,75);
- MyStudent ms4=new MyStudent("d",20,95);
- MyStudent ms5=new MyStudent("e",20,70);
- //装进集合中
- msSet.add(ms1);
- msSet.add(ms2);
- msSet.add(ms3);
- msSet.add(ms4);
- msSet.add(ms5);
- //用迭代器取出来
- Iterator<MyStudent> it=msSet.iterator();
- while(it.hasNext()){
- MyStudent ms=it.next();
- System.out.println(ms.getName()+","+ms.getAge()+","+ms.getGrade());
- }
- /*打印结果为:
- e,20,70
- c,20,75
- b,20,80
- a,20,90
- d,20,95
- 可以看出,已经按照grade升序排列了、
- */
- }
- }
- //定义一个比较器,实现compare方法
- class MyComparator implements Comparator<MyStudent>{
- @Override
- public int compare(MyStudent o1, MyStudent o2) {
- // TODO Auto-generated method stub
- int flag=0;
- if(o1.getGrade()>o2.getGrade()){
- flag=1;
- }else if(o1.getGrade()<o2.getGrade()){
- flag=-1;
- }
- return flag;
- }
- }
- //学生类
- class MyStudent {
-
- private String name;
- private int age;
- private int grade;
- //构造方法
- public MyStudent(){};
-
- public MyStudent(String name, int age, int grade) {
- this.name = name;
- this.age = age;
- this.grade = grade;
- }
-
- //getters and setters
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public int getGrade() {
- return grade;
- }
- public void setGrade(int grade) {
- this.grade = grade;
- }
- }
复制代码 |