数据结构与算法(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();
    }
}

测试类

//测试类
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类<T>的类型
        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;
        }
    }
}

2.运行结果

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


总结

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是夜阑的狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值