Comparable和Comparator

在用Arrays.sort给对象数组进行排序时,要求必须对象实现Comparable接口。

Comparable和Comparator
package com.sk;

import java.util.Arrays;

public class compare2 {
  public static void main(String[] args) {
    Employee[] staff=new Employee[4];
    staff[0]=new Employee("sk",10000.0);
    staff[1]=new Employee("sk3",110000.0);
    staff[2]=new Employee("sk4",80000.0);
    staff[3]=new Employee("sk2",70000.0);
    //该方法在对对象数组进行排序时,对象必须实现comparable接口
    Arrays.sort(staff);
    for (Employee employee : staff) {
        System.out.println(employee.getName()+":"+employee.getSalary());
    }
}
    
    

}
class Employee implements Comparable<Employee>{
    private String name;
    private Double salary;
    public String getName() {
        return name;
    }
    public Employee(String name, Double salary) {
        super();
        this.name = name;
        this.salary = salary;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getSalary() {
        return salary;
    }
    public void setSalary(Double salary) {
        this.salary = salary;
    }
    @Override
    public int compareTo(Employee other) {
        /**
         * Double.compare(x,y)方法:比较两个double值,x>y返回1。
         * 
         * compareTo方法的返回值为一个整型数值,如果两个对象不相等,则返回一个正值或负值。
         * 在对两个整数进行比较时,可以返回相减值,但是不适用于浮点型
         * 因为两个浮点数接近但又不想等时,他们的差四舍五入可能变成0;所以调用Double.compare方法
         */
        return Double.compare(salary,other.salary);
    }
    
}
Comparable

如果要给String类型按长度进行排序,虽然String实现了Comparable接口,但是String.compareTo方法是按字典顺序进行排序。

我们不能修改String的源码,这时候可以使用Comparator(比较器)。

Comparable和Comparator
package com.sk;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;

public class compare implements Comparator<String>{

    @Override
    public int compare(String o1, String o2) {
        return o1.length()-o2.length();
    }
    public static void main(String[] args) {
        String [] strings={"3333","44"};
        //使用此方法,对象必须实现Comparator接口
        Arrays.sort(strings, new compare());
        for(int x=0;x<strings.length;x++)
        {
            System.out.println(strings[x]);
        }
    }
    

}
Comparator

可以使用lambda表达式更方便地使用Comparator。

上一篇:sql 查出一张表中重复的所有记录数据


下一篇:PYTHON1.面向对象_day04