两种方式
- 自然排序:java.lang.Comparable
Arrays.sort(T[]) 默认使用的比较方式。 - 定制排序:java.util.Comparator
Arrays.sort(T[], Comparator<? super T>) - 两种排序方式都是稳定的。并且,仅当比较方法返回正数时,才会触发元素的交换。
Comparable
import java.util.Arrays;
public class Test02 {
public static void main(String[] args) {
Diamond[] diamonds = {new Diamond(3), new Diamond(-2), new Diamond(1), new Diamond(65), new Diamond(1)};
System.out.println(Arrays.toString(diamonds));
Arrays.sort(diamonds);
System.out.println(Arrays.toString(diamonds));
}
}
class Diamond implements Comparable<Diamond> {
private Integer x;
@Override
public int compareTo(Diamond other) {
return this.x - other.x;
}
@Override
public String toString() {
return "%d@%s".formatted(hashCode(), x.toString());
}
public Diamond(Integer x) {
this.x = x;
}
}
[124313277@3, 100555887@-2, 1769597131@1, 1983747920@65, 1543727556@1]
[100555887@-2, 1769597131@1, 1543727556@1, 124313277@3, 1983747920@65]
Comparator
import java.util.Arrays;
import java.util.Comparator;
public class Test02 {
public static void main(String[] args) {
Diamond[] diamonds = {new Diamond(3), new Diamond(-2), new Diamond(1), new Diamond(65), new Diamond(1)};
System.out.println(Arrays.toString(diamonds));
Arrays.sort(diamonds, (o1, o2) -> o2.getX() - o1.getX());
System.out.println(Arrays.toString(diamonds));
}
}
class Diamond implements Comparable<Diamond> {
private Integer x;
@Override
public int compareTo(Diamond other) {
return this.x - other.x;
}
@Override
public String toString() {
return "%d@%s".formatted(hashCode(), x.toString());
}
public Diamond(Integer x) {
this.x = x;
}
public Integer getX() {
return x;
}
}
[124313277@3, 611437735@-2, 100555887@1, 1769597131@65, 1983747920@1]
[1769597131@65, 124313277@3, 100555887@1, 1983747920@1, 611437735@-2]