这篇文章我们一起来看一下java中的Comparable接口
目录
1.学数据结构与算法的小套路
2.Comparable接口介绍
3.小结
1.学数据结构与算法的小套路
我们知道java是面向对象的,并且底层为我们封装了许多的方法。在java的开发工具包jdk中,已经给我们提供了很多数据结构与算法的实现,比如List , Set ,Map , Math等等,都是以API的方式提供,这种方式的好处在于一次编写,多处使用。我们借鉴jdk的方式,也把算法封装到某个类中,那如果是这样,在我们写java代码之前,就需要先进行API的设计,设计好之后,再对这些API进行实现。
就比如我们先设计一套API如下∶
然后再使用java代码去实现它。以后我们讲任何数据结构与算法都是以这种方式讲解
2.Comparable接口介绍
提到排序你会想到什么?对数字进行排序,对数组中元素进行排序,或者说对字符进行排序。那能不能对对象进行排序呢?答案是可以的。对对象进行排序,首先我们要定义一个排序规则,就是说你是按照什么对这个对象进行排序的。怎么定义这个规则呢?用Comparable接口来定义这个规则。java中为我们提供了Comparable接口,用它来给对象定义排序规则,从而实现对对象的排序。
下面我们通过具体实例一起来看一下吧
需求:
- 定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则
- 定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试
类函数:
package algorithm.sort;
//定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则
public class Student implements Comparable<Student>{
private int age;
private String username;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", username='" + username + '\'' +
'}';
}
@Override
public int compareTo(Student o) {
//返回的是一个数值类型的值,根据值的正负来判断大小
return this.age-o.age;
}
}
测试函数:
package algorithm.test;
import algorithm.sort.Student;
//定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试
public class TestComparable {
public static void main(String[] args) {
Student s1 = new Student();
s1.setAge(18);
s1.setUsername("张三");
Student s2 = new Student();
s2.setAge(20);
s2.setUsername("李四");
Comparable max = getMax(s1,s2);
System.out.println(max);
}
public static Comparable getMax(Comparable c1,Comparable c2){
int result = c1.compareTo(c2);
//大于0,c1大;小于0,c2大;等于0,一样大
if (result >= 0){
return c1;
}else {
return c2;
}
}
}
输出结果:
3.小结
这个其实没啥好说的,就是一个类实现了一个接口,这个接口赋予这个类一个排序规则。然后测试时就按这个规则对这个类的对象进行了一个比较排序。
只是要注意Comparable这个接口的使用就行。