Java 常用类库 之 比较类 Comparable

简介:

http://www.verejava.com/?id=169930999133100

/**
    知识点: 比较类 Comparable

    题目: 将某班学生按数学成绩从小到大排序

    思路:
        1. 抽象出类:
            1.1 班级(ClassSet)
            1.2 学生(Student)
        2. 找出类关系:
            2.1 学生 属于 班级 Student -> ClassSet(多对1)
        3. 找出类属性:
            3.1 ClassSet(班级名称,班级人数)
            3.2 Student(学生名称,数学成绩)
        4. 找出类方法:
            4.1 学生添加到班级 ClassSet{addStudent(Student s)}
            4.2 学生成绩从小到大排序  ClassSet{sortByScore()}
*/
import java.util.Arrays;

public class TestComparable {
    
    public static void main(String[] args) {
        //实例化4G班级
        ClassSet c = new ClassSet("4G", 4);
        //添加学生
        c.addStudent(new Student("李明", 90));
        c.addStudent(new Student("李浩", 80));
        c.addStudent(new Student("王涛", 95));
        c.addStudent(new Student("张胜", 70));

        //获得4G班级学生数组集合
        Student[] students = c.getStudents();
        //输出学生信息
        for (Student s : students) {
            if (s != null)
                System.out.println(s.getName() + "," + s.getMathScore());
        }

        System.out.println("\n根据学生成绩排序");
        Arrays.sort(students);
        for (Student s : students) {
            if (s != null)
                System.out.println(s.getName() + "," + s.getMathScore());
        }

    }
}

class ClassSet {
    
    private String className;//班级名称
    private int maxSize;//班级学生人数
    private int currentSize;//当前多少学生
    private Student[] students;//所有学生的数组

    public ClassSet(String className, int maxSize) {
        this.className = className;
        this.maxSize = maxSize;
        students = new Student[maxSize];
    }

    public Student[] getStudents() {
        return this.students;
    }

    //添加学生
    public void addStudent(Student s) {
        for (int i = 0; i < students.length; i++) {
            if (students[i] == null) {
                students[i] = s;
                currentSize++;
                break;
            }
        }
    }
}

class Student implements Comparable {
    private String name;//学生姓名
    private int mathScore;//数学成绩

    public Student(String name, int mathScore) {
        this.name = name;
        this.mathScore = mathScore;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMathScore() {
        return this.mathScore;
    }

    public void setMathScore(int mathScore) {
        this.mathScore = mathScore;
    }

    /**
        实现Comparable 接口要复写 compareTo(T o) 方法
        如果从小到大排序
        大于         则返回 1
        小于         则返回 -1
        等于         则返回 0
        如果从大到小排序
        大于         则返回 -1
        小于         则返回 1
        等于         则返回 0
    */
    public int compareTo(Object obj) {
        if (obj instanceof Student) {
            Student s = (Student) obj;
            if (this.mathScore > s.getMathScore())
                return 1;
            if (this.mathScore < s.getMathScore())
                return -1;

        }
        return 0;
    }

}

http://www.verejava.com/?id=169930999133100

目录
相关文章
|
7天前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
39 20
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
168 57
|
23天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
71 8
|
2月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
86 17
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
145 4
|
2月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
90 2
|
2月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
86 4
|
2月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
64 5