前言
本文介绍一个自定义排序和常见的排序API
比较器
-
通过实现
Comparator
接口中的compare(T o1, T o2)
方法来实现自定义排序方法一:
class MyComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } } Collections.sort(list, new MyComparator());
方法二
Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
- 返回值<0:交换o1和o2的位置
- 返回值=0:不交换位置,不排序
- 返回值>0:不交换o1和o2的位置
-
类实现
Comparable
接口,实现compareTo(T o)
方法。class Student implements Comparable<Student> { int sum; @Override public int compareTo(Student o) { return this.sum - o.sum; } }
一、普通数组 int[]
1、Arrays.sort()类
-
Arrays.sort(int[] arr) 按照数字从小到大排序
import java.util.Arrays; import java.util.Scanner; /** * @author yanshuang * @date 2021/11/14 1:03 下午 */ public class SortTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; // 数组大小可以定义 System.out.print("排序前:"); for(int i = 0;i < n;i ++) { arr[i] = sc.nextInt(); } Arrays.sort(arr,0,n); System.out.print("排序后:"); for(int i = 0;i < n;i ++) { System.out.print(arr[i] + " "); } } }
运行结果:
5 排序前:1 7 3 5 2 排序后:1 2 3 5 7
当前数组的大小和输入的限定是一样大小,如果不一样
int[] arr = new int[1000];
5 排序前:1 9 5 3 4 排序后:0 0 0 0 0
注意Array.sort的后两个参数,如果你数组开的大小比你要排序的数组大小大,那么数组中除了你输入的数字外,其他都是0
-
Arrays.sort(int[] a, int fromIndex, int toIndex)按照指定区间排序数组
import java.util.Arrays; import java.util.Collections; import java.util.Scanner; /** * @author yanshuang * @date 2021/11/14 1:03 下午 */ public class SortTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; // 数组大小可以定义 System.out.print("排序前:"); for(int i = 0;i < n;i ++) { arr[i] = sc.nextInt(); } Arrays.sort(arr, 2,4); System.out.print("排序后:"); for(int i = 0;i < n;i ++) { System.out.print(arr[i] + " "); }