首页 > 编程语言 >java 使用implements接口实现sort

java 使用implements接口实现sort

时间:2022-09-27 06:33:19浏览次数:44  
标签:implements sort Comparable java String 接口 Employee class

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

 

标签:implements,sort,Comparable,java,String,接口,Employee,class
From: https://www.cnblogs.com/czwlinux/p/16733176.html

相关文章