• 数据结构与算法(Java篇)笔记--Comparable接口



    前言

    在我们的程序中,排序是非常常见的一种需求,提供一些数据元素,把这些数据元素按照一定的规则进行排序。比如查询一些订单,按照订单的日期进行排序;再比如查询一些商品,按照商品的价格进行排序等等。所以,接下来我们要学习一些常见的排序算法。
    在java的开发工具包jdk中,已经给我们提供了很多数据结构与算法的实现,比如List,Set,Map,Math等等,都是以API的方式提供,这种方式的好处在于一次编写,多处使用。我们借鉴jdk的方式,也把算法封装到某个类中,那如果是这样,在我们写java代码之前,就需要先进行API的设计,设计好之后,再对这些API进行实现。


    一、Comparable接口介绍

    由于我们这里要讲排序,所以肯定会在元素之间进行比较,而Java提供了一个接口Comparable就是用来定义排序规则的,在这里我们以案例的形式对Comparable接口做一个简单的回顾。Comparable接口是用来实现对象的排序比较的一个接口,一般自定对象要实现按照一定规则进行排序(比如说要求按照升序或者是降序排列显示),那么可以让需要排序的对象的类去实现“Comparable”接口,然后覆写该接口的一个compareTol),排序的规则就是在该方法定义的。

    二、接口使用

    1.代码实现

    1.定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则;
    2.定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试
    代码如下(示例):
    实现Comparable的学生类

    //学生类
    public class Student implements Comparable<Student>{
        private String username;
        private int age;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student [age=" + age + ", username=" + username + "]";
        }
    
        @Override
        public int compareTo(Student o) {
            // TODO Auto-generated method stub  JAVA_TOOL_OPTIONS  -Dfile.encoding=UTF-8
            return this.getAge() - o.getAge();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    测试类

    //测试类
    public class TestComparable {
        
        public static void main(String[] args){
            Student s1 = new Student();
            s1.setUsername("CSH");
            s1.setAge(24);
    
            Student s2 = new Student();
            s2.setUsername("JMFive");
            s2.setAge(17);
    	    // 使用Comparable类的类型
            Comparable<Student> max = getMax(s1, s2);
            System.out.println(max);
        }
        
    	// 这里Student c1不能有Comparable c1,这样会有警告
        public static Comparable<Student> getMax(Student c1, Student c2){
            int result = c1.compareTo(c2);
    
            if(result>=0){
                return c1;
            }else{
                return c2;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    2.运行结果

    编写完成之后,点击运行就能根据要求比较都这两个对象的大小了,如下图所示:
    在这里插入图片描述


    总结

    1、如果类的对象集合或者是数组要进行排序,则可以实现 Comparable 接口
    2、其实上Arrays的sort方法中会调用我们覆写的compareTo方法,根据这个方法的返回值来确定哪一个对象在前面。

  • 相关阅读:
    王道考研——操作系统(第二章 进程管理)
    重量级ORM框架--持久化框架Hibernate【JPA注解开发】
    C语言入门Day_28 结语
    图深度学习_谱图论和图上的信号处理
    【Flutter--实战】Flutter 简介
    手把手写深度学习(15):在Hugging Face上构建自己的语料库
    centos 文件分割
    聚焦“教-学-评-测-练-管一体化”,推动新型人才培养
    Maven的安装与配置(详细版)
    pdf里面的图片如何提取出来?
  • 原文地址:https://blog.csdn.net/csh1807266489/article/details/126782378