Java 排序梳理 sort
文章目录
- 1 数组排序,Arrays.sort()
- 1.1 lambda表达式
- 1.2 Comparator
- 2 List 排序,Collections.sort()
- 3 自建类
- 3.1 lambda 表达式
- 3.2 Comparable<>接口
- 4 ps
1 数组排序,Arrays.sort()
int[][] a = {{3, 1},{1, 4},{9, 2}};
1.1 lambda表达式
按首元素顺序排序。两者等价。
Arrays.sort(a, (o1, o2) -> o1[0] - o2[0]);
// 防溢出,o1[0] - o2[0] 大于 2 ^ 32
Arrays.sort(a, (o1, o2) -> Integer.compare(o1[0], o2[0]));
先按首元排序,然后按次元。
两种同样可以等价
Arrays.sort(a, (o1, o2) -> {if (o1[0] != o2[0]) return o1[0] - o2[0];return o1[1] - o2[1];});Arrays.sort(a, (o1, o2) -> {if (o1[0] != o2[0]) return Integer.compare(o1[0], o2[0]);return Integer.compare(o1[1], o2[1]);});
1.2 Comparator
两种写法
Arrays.sort(a, Comparator.comparingInt(o -> o[0]));Arrays.sort(a, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0] - o2[0]; // return Integer.compare(o1[0], o2[0])}});
2 List 排序,Collections.sort()
用法与 Arrays.sort() 相同。此方法用于 List,仅此而已。
List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 8, 1, 2));
Collections.sort(numbers); // 顺序
Collections.sort(numbers, (a, b) -> b - a); // 逆序
3 自建类
3.1 lambda 表达式
Arrays.sort(points, (p1, p2) -> Integer.compare(p1.l, p2.l));
3.2 Comparable<>接口
重载 compareTo() 函数
class Point implements Comparable<Point> {int x, y;public Point(int x, int y) {this.x = x;this.y = y;}public int compareTo(Point other) {return Integer.compare(this.x, other.x); // 按x坐标排序}
}Arrays.sort(points, 0, n);
4 ps
String 是可比较类型
String[] names = {"Alice", "Bob", "Charlie"};
Arrays.sort(names);