Java-通过对象属性来排序(洛谷P1093)

简介: 题目我就不发了,关键一直在纠缠我的问题是Java如何通过对象的参数来排序,看了好多帖子今天终于学会两种。

题目我就不发了,关键一直在纠缠我的问题是Java如何通过对象的参数来排序,看了好多帖子今天终于学会两种。


例:分别输入三名学生的语文、数学、英语成绩,要求按照学生的语文进行排名。


第一种方法

首先,我们先创建一个类(必须继承Comparable接口并实现compareTo方法)


class Student implements Comparable<Student>{
    int id;
    int ch,math,eng;
    int sum;
    public Student(){
        this.id = 0;
        this.ch = 0;
        this.math = 0;
        this.eng = 0;
        this.sum=0;
    }
    public Student(int id, int ch, int math, int eng) {
        this.id = id;
        this.ch = ch;
        this.math = math;
        this.eng = eng;
        this.sum=ch+math+eng;
    }
/**
    这里省去get和set代码
**/
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", ch=" + ch +
                ", math=" + math +
                ", eng=" + eng +
                ", sum=" + sum +
                '}';
    }
//升序排列
    @Override
    public int compareTo(Student o) {
        return this.ch-o.ch;
    }
}


第二种方法

第一种方法不够灵活,因为它只能根据对象的语文成绩进行排序。而第二种方法不需要类继承Comparable接口,直接在Java的Arrays的sort方法中new一个Compartor对象并实现。


如果不是用的数组来存放对象,而是集合,可以使用集合中的排序方法Collections.sort()方法,参数和上面一样。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Scholarship {
    static int n;
    static Student[] students;
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);   //参赛人数
        n=input.nextInt();
        students=new Student[n];
        for (int i = 0; i < n; i++) {
            students[i]=new Student();
            students[i].id=i;
            students[i].ch=input.nextInt();
            students[i].math=input.nextInt();
            students[i].eng=input.nextInt();
            students[i].sum=students[i].getSum();
            System.out.println("学生"+i+"的信息为 "+students[i].toString());
        }
    //升序排序
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.ch-o2.ch;
            }
        });
        System.out.println("根据语文排序后的学生排名:");
        for (int i = 0; i < students.length; i++) {
            System.out.println(students[i].toString());
        }
    }
}
class Student{
    int id;
    int ch,math,eng;
    int sum;
    public Student(){
        this.id = 0;
        this.ch = 0;
        this.math = 0;
        this.eng = 0;
        this.sum=0;
    }
    public Student(int id, int ch, int math, int eng) {
        this.id = id;
        this.ch = ch;
        this.math = math;
        this.eng = eng;
        this.sum=ch+math+eng;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", ch=" + ch +
                ", math=" + math +
                ", eng=" + eng +
                ", sum=" + sum +
                '}';
    }
}


运行结果


image.png

相关文章
|
1天前
|
存储 缓存 安全
Java性能优化(二):Java基础-String对象及其性能优化
在深入探讨了String字符串的性能优化后,我们认识到优化字符串处理对提升系统整体性能的重要性。Java在版本迭代中,通过精心调整成员变量和内存管理机制,不断对String对象进行优化,以更高效地使用内存资源。String对象的不可变性是Java语言设计中的一个关键特性,它不仅确保了字符串的安全性,也为字符串常量池的实现提供了基础。通过减少相同值的字符串对象的重复创建,常量池有效地节约了内存空间。然而,不可变性也带来了挑战。在处理长字符串拼接时,我们需要显式使用类来避免性能下降。
9 1
|
1天前
|
Java 测试技术 数据库
Java一分钟之-Mockito:模拟对象测试
【6月更文挑战第4天】Mockito是Java单元测试中的模拟框架,用于创建和配置模拟对象以隔离测试代码。核心概念包括:模拟对象、预期行为(定义方法调用响应)、验证(检查方法调用)和捕获参数。常见问题包括过度模拟、忽略未使用的模拟调用、不恰当配置和误用Mockito注解。解决方案包括正确选择模拟对象、验证所有交互、仔细配置模拟行为及在测试类中正确使用Mockito注解。提供的代码示例展示了如何使用Mockito模拟和验证方法调用,以实现独立且准确的测试。学习和避免这些易错点可提升测试效率和代码质量。
13 0
Java一分钟之-Mockito:模拟对象测试
|
2天前
|
Java 编译器 C语言
18. 【Java教程】类和对象
18. 【Java教程】类和对象
5 1
|
2天前
|
搜索推荐 算法 Java
【Java基础】 几种简单的算法排序
几种简单的JAVA算法排序
20 4
|
4天前
|
XML Java 数据格式
Java一分钟之-JAXB:Java对象到XML绑定
【6月更文挑战第1天】Java Architecture for XML Binding (JAXB) 是Java平台标准,用于自动转换Java对象和XML。它通过注解实现声明式映射,简化XML处理。本文介绍了JAXB的基本使用、常见问题和最佳实践,包括对象到XML(Marshalling)和XML到对象(Unmarshalling)过程,并通过示例展示如何在Java类和XML之间进行转换。注意类型匹配、注解冲突和JAXB上下文创建等问题,以及如何优化性能和避免循环引用。
11 3
|
5天前
|
存储 Java
Java语言中的类与对象:深入理解与实践
Java语言中的类与对象:深入理解与实践
|
5天前
|
存储 Java
Java类与对象的技术性文章
Java类与对象的技术性文章
23 0
|
6天前
|
Java
类与对象:Java面向对象编程的基石
类与对象:Java面向对象编程的基石
|
6天前
|
存储 Java API
Java的匿名对象
Java的匿名对象
|
6天前
|
Java
Java的对象的产生与使用
Java的对象的产生与使用