定义一个Student类,属性为 学号,姓名,年龄,成绩,往List集合中存入5个Student对象,并使用Collections对集合排序,要求按照学生成绩降序排序,并输出排序后的List
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
Student student1 = new Student(sc.next(), sc.next(), sc.nextInt(), sc.nextInt());
students.add(student1);
}
Collections.sort(students);
for (Student student : students) {
System.out.println(student);
}
}
}
public class Student implements Comparable<Student>{
private String num,name;
private int old,fraction;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOld() {
return old;
}
public void setOld(int old) {
this.old = old;
}
public int getFraction() {
return fraction;
}
public void setFraction(int fraction) {
this.fraction = fraction;
}
public Student(String num,String name,int old,int fraction){
this.num = num;
this.name = name;
this.old = old;
this.fraction = fraction;
}
public int compareTo(Student other) {
// int compareTo(T o)将此对象与指定的对象进行比较以进行排序。 返回一个负整数,零或正整数,因为该对象小于,等于或大于指定对象。
//
return Integer.compare(fraction,other.fraction);
}
//这是第二种写法
// public int compareTo(Student s) {
// return s.getFraction() - this.getFraction();
}
public String toString(){
return "Student{" +
"num='" + num + '\'' +
", name='" + name + '\'' +
", olf=" + old +
", fraction=" + fraction +
'}';
}
}
首先看Stoudent类一个构造器,四个student方法,一个接口方法compare,一个object的重写方法toString。
public Student(String num,String name,int old,int fraction)//构造器
//方法
public String getNum()
public String getName()
public int getOld()
public int getFraction()
//接口方法
public int compareTo(Student s)
//输出方法
public String toString()
这其中最重要的就是compare这个方法,这是利用接口Comparable的方法。
这里我着重解释Comparbale接口,大家仔细看,如果不懂可以评论区留言。
首先我们要将类声明为实现某个接口,需要使用关键字implements:
public class Student implements Comparable()
当然我们要进行学生成绩的比较,在这里我们可以做的更好一些,给泛型Comparable接口提供一个类型参数(Student)
class Employee implements Comparable<Student>{
public int comareTo(Student other){
return Integer.compare(fraction,other.fraction);
}
}
这里使用是的静态方法Integer.compare方法(还有Double.compare)方法。
第二种写法
public int comareTo(Student s){
return s.getFraction() - this.getFraction();
}
这两种方法都是本质没有区别,都是如果第一个参数小于第二个参数,它会返回一个负值;如果二者相等则返回0;否则返回一个正值
然后就是测试类Test中的知识,使用Collections.sort(students);进行比较