- package cn.itcast.day02;
-
- //package com.itheima;
-
- /**
-
- 第十题: 定义一个学生类, 需要有姓名, 年龄, 考试成绩三个成员属性,创建5个对象, 属性可为任意值. 编程对这5个对象按成绩排序,并将结果输出。(提示,用TreeSet和Comparator实现)
-
- */
-
- import java.util.*;
-
- import java.io.*;
-
- class Student implements Comparable<Student>//定义一个学生类并继承Comparable类,让学生类具备比较性
-
- {
-
- //定义学生的姓名,年龄和分数
-
- private String name;
-
- private int age;
-
- private double score;
-
- //构造函数初始化,把学生的姓名,年龄和分数赋值给学生对象
-
- Student(String name,int age,double score)
-
- {
-
- this.name=name;
-
- this.age=age;
-
- this.score=score;
-
- }
-
- //设置学生的姓名
-
- public void setName(String name)
-
- {
-
- this.name=name;
-
- }
-
- //获取学生的姓名
-
- public String getName()
-
- {
-
- return this.name;
-
- }
-
- //设置学生的年龄
-
- public void setAge(int age)
-
- {
-
- this.age=age;
-
- }
-
- //获取学生的年龄
-
- public int getAge()
-
- {
-
- return this.age;
-
- }
-
- //设置学生的分数
-
- public void setScore(double score)
-
- {
-
- this.score=score;
-
- }
-
- //获取学生的分数
-
- public double getScore()
-
- {
-
- return this.score;
-
- }
-
- //覆盖Comparable类的compareTo方法,让学生有一个自然的排序状态
-
- public int compareTo(Student stu)
-
- {
-
- //用变量num记录学生按照姓名比较后的结果
-
- int num=this.name.compareTo(stu.name);
-
- //如果姓名相同,再比较学生的年龄
-
- if(num==0)
-
- return new Integer(this.age).compareTo(new Integer(stu.age));
-
- return num;
-
- }
-
- //覆盖hashCode方法,以便于这个类被集合使用
-
- public int hashCode()
-
- {
-
- return name.hashCode()+(age*37);
-
- }
-
- //覆盖equals方法,以便于这个类被集合使用
-
- public boolean equals(Object obj)
-
- {
-
- //判断obj是否Student的子类对象
-
- if(!(obj instanceof Student))
-
- throw new RuntimeException("类型不匹配");
-
- Student stu=(Student)obj;
-
- return this.name.equals(stu.name)&&this.age==stu.age;
-
- }
-
- //覆盖toString方法
-
- public String toString()
-
- {
-
- return "Student["+name+", "+age+", "+score+"]";
-
- }
-
- }
-
- //自定义一个比较器,按照学生的分数从低到高排序
-
- class StuCom implements Comparator<Student>
-
- {
-
- //覆盖compare方法
-
- public int compare(Student s1,Student s2)
-
- {
-
- //用变量num记录学生分数比较后的结果
-
- int num=new Double(s1.getScore()).compareTo(new Double(s2.getScore()));
-
- if(num==0)
-
- return s1.getName().compareTo(s2.getName());
-
- return num;
-
- }
-
- }
-
- class Test10
-
- {
-
- public static void main(String[] args)
-
- {
-
- //定义一个TreeSet集合存放Student对象,因为分数一般是从高到底进行排序所以用了Collections的强 行逆转比较器的方法
-
- TreeSet<Student> ts=new TreeSet<Student>(Collections.reverseOrder(new StuCom()));
-
- //向集合添加Student对象
-
- ts.add(new Student("zhangsan01",32,100));
-
- ts.add(new Student("zhangsan02",32,82));
-
- ts.add(new Student("zhangsan03",32,83));
-
- ts.add(new Student("zhangsan04",32,48));
-
- ts.add(new Student("zhangsan05",32,55));
-
- //利用高级for循环打印集合
-
- for(Student stu : ts)
-
- {
-
- System.out.println(stu);
-
- }
-
- }
-
- }
-
复制代码 哥们.没有错啊
运行结果
Student[zhangsan01, 32, 100.0]
Student[zhangsan03, 32, 83.0]
Student[zhangsan02, 32, 82.0]
Student[zhangsan05, 32, 55.0]
Student[zhangsan04, 32, 48.0]
|