在用Arrays.sort给对象数组进行排序时,要求必须对象实现Comparable接口。
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(比较器)。
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。