定义一个Student类,属性为 学号,姓名,年龄,成绩,往List集合中存入5个Student对象,并使用Collections对集合排序,要求按照学生成绩降序排序,并输出排序后的List

定义一个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);进行比较

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步行千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值