1. 对基本类型数组排序
默认顺序为从小到大,如何要自定义数组的排序顺序,只能将其自动装箱后自定义排序规则
package sort;
import java.util.Arrays;
import java.util.Comparator;
public class IntSort {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 6, -1, 3, 0, 9};
//默认排序方法为递增顺序
Arrays.sort(arr);
for (int i : arr) System.out.print(i + " ");
System.out.println();
//自动装箱
Integer[] arr2 = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) arr2[i] = arr[i];
//自定义排序规则
Arrays.sort(arr2, new Comparator<Integer>() {
//顺序为从大到小
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o2, o1);
}
});
for (Integer i : arr2) System.out.print(i + " ");
}
}
2. 对对象类型进行排序
有两种方法:
- 类实现Comparable接口
- 使用Comparator自定义排序方式
方式1:类实现Comparable接口
package sort;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
public class ClassSort {
public static void main(String[] args) {
Employee[] employees = new Employee[3];
employees[0] = new Employee(1, "male", 123.2);
employees[1] = new Employee(2, "female", 1235.22);
employees[2] = new Employee(3, "male", 222.3);
//方法一:类实现Comparable接口
Arrays.sort(employees);
for (Employee e : employees) {
System.out.println(e.id + " " + e.salary);
}
}
}
class Employee implements Comparable<Employee> {
Integer id;
String gender;
Double salary;
public Employee(Integer id, String gender, Double salary) {
this.id = id;
this.gender = gender;
this.salary = salary;
}
public Double getSalary() {
return salary;
}
public String getGender() {
return gender;
}
public Integer getId() {
return id;
}
@Override
public int compareTo(Employee o) {
return Double.compare(o.salary,salary);
}
}
方式2:使用Comparator自定义排序方式
package sort;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
public class ClassSort {
public static void main(String[] args) {
Employee[] employees = new Employee[3];
employees[0] = new Employee(1, "male", 123.2);
employees[1] = new Employee(2, "female", 1235.22);
employees[2] = new Employee(3, "male", 222.3);
//方法二:
Arrays.sort(employees, new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
return Double.compare(o2.salary, o1.salary);
}
});
//可以替换为lambda表达式,更加清晰
// Arrays.sort(employees, (o1, o2) -> Double.compare(o2.salary, o1.salary));
for (Employee e : employees) {
System.out.println(e.id + " " + e.salary);
}
}
}
class Employee{
Integer id;
String gender;
Double salary;
public Employee(Integer id, String gender, Double salary) {
this.id = id;
this.gender = gender;
this.salary = salary;
}
public Double getSalary() {
return salary;
}
public String getGender() {
return gender;
}
public Integer getId() {
return id;
}
}