java 使用implements接口实现sort
一、java是单继承,implements可以有多个
我们可以以这样子的格式进行集成和尊从接口:class Child extends Parent implements protocol1, protocol2 { };
Child类继承了Parent类,然后实现了接口protocol1,还有接口protocol2
因为java是单继承所以extends只能有一个
我们有时候会疑惑,我们是否可以使用抽象类来替代接口呢? 答案是可以的
abstract class AProtocol {......};
class Child extends AProtocol{......};
但是因为java是单继承,那么这个抽象的类被用在了继承这里,那么就没有办法再继承别的父类。所以正常会写成接口不会写成抽象类
二、对数组进行Sort
1、使用数组内置的比较器进行比较
Employee[] staff = new Employee[3]; staff[0] = new Employee("cc1", 75688, 1987, 10,1); staff[1] = new Employee("cc2", 75288, 1988, 6,2); staff[2] = new Employee("cc3", 75388, 1989, 1,1);
假设这里有Employee数组并且需要对Employee的salary进行排序;那么我们是不是可以这么做:Arrays.sort(staff); 编译发现不通过
因为sort对应的数组的Employee需要实现接口Comparable<T>
class Employee implements Comparable<Employee> { 。。。。。。 @Override public int compareTo(Employee employee) { return Double.compare(salary, employee.salary); } }
如上所示,需要实现Comparable<Employee> 的compareTo函数,通过salary进行比较大小
所以使用sort进行比较的时候需要实现Comparable<T> 的compareTo函数,其中T是要传入compareTo的参数类型
2、如果这里不使用实现接口Comparable<T> 的方式,而希望使用比较器也是可以的
我们平常对字符串进行sort的时候是直接sort没有使用比较函数;是因为String本身已经默认实现了Comparable<T> 的compareTo函数
那么我们如果要改变比较方式,比如:改为通过字符串的长度进行比较,因为我们不能对String进行继承(String是final class)所以只能使用比较函数的方式
Arrays.sort有这么一个函数:public static <T> void sort(T[] var0, Comparator<? super T> var1)
那么我们可以通过实现Comparator这个接口来进行比较
class LengthComparator implements Comparator<String> { @Override public int compare(String s, String t1) { return s.length() - t1.length(); } }
然后sort的调用方式的第二个参数是:新建该LengthComparator 类即可实现按照字符串的长度进行比较
String[] friends = {"aa", "aaa", "aaaaa", "a"}; Arrays.sort(friends, new LengthComparator());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!