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());

 

posted @   LCAC  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示