通过Arrays类事物静态sort()方法可以实现对数组的排序。sort方法提供了多种重载方式,可以对任意类型的数组进行升序排序。
方法摘要:
Type | Method | Description |
---|---|---|
static void | sort(T[] a) | 对指定类型的数组按数字升序排序 |
static void | sort(T[] a, int fromIndex, int toIndex) | 再数组中指定范围,按数字升序排序 |
static <T> void | sort(T[] a, Comparator<? super T> c ) | 根据指定的比较器引发的顺序对指定的对象数组进行排序 |
static <T> void | sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c ) | 根据指定的比较器引发的顺序对指定的对象数组的指定范围进行排序 |
1. Arrays.sort(T[] a) 对指定类型的数组按数字升序排序,时间复杂度:n*log(n)。
import java.util.Arrays; //导入Java.util.Arrays类
public class Taxis {
public static void main(String[]args) {
int arr[]=new int[] {2,3,7,6,4,9,0,1,8,5}; //声明数组
Arrays.sort(arr); //将数组进行升序排序
for(int i=0;i<arr.length;i++) { //输出数组
System.out.print(arr[i]+" ");
}
}
}
Output:0 1 2 3 4 5 6 7 8 9
2. Arrays.sort(T[] a, int fromIndex, int toIndex) 对数组在指定范围内升序排序
import java.util.Arrays; //导入Java.util.Arrays类
public class Taxis {
public static void main(String[]args) {
int arr[]=new int[] {2,3,7,6,4,9,0,1,8,5}; //声明数组
Arrays.sort(arr,arr.length/2,arr.length); //对数组后半部分进行排序
for(int i=0;i<arr.length;i++) { //输出数组
System.out.print(arr[i]+" ");
}
}
}
Output:2 3 7 6 4 0 1 5 8 9
3. Arrays.sort(T[] a, Comparator<? super T> c) 根据指定的比较器引发的顺序对指定的对象数组进行排序。
降序排序
使用sort()方法默认是进行升序排序的,如果我们想要进行降序排序时我们应该怎么做呢?这时候需要我们去实现Comparator接口来自定义比较方法。
import java.util.Arrays;
import java.util.Comparator;
public static void main(String[]args) {
Integer arr[]=new Integer[] {2,3,7,6,4,9,0,1,8,5};
//通过匿名内部类的方式实现Comparator接口
Arrays.sort(arr, new Comparator<Integer>() {
@Override
//该方法用来比较两数的大小,返回结果的正负进行排序,这里如果采用arr2 - arr1则实现降序排序
public int compare(Integer arr1, Integer arr2) {
return arr2 - arr1;
}
});
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
Output: 9 8 7 6 5 4 3 2 1 0
由于我们可以自定义比较器,所以我们进行比较的数据并不局限于基本的数据类型,对于数组、各种类也同样适用。
比较二维数组的第一个数
import java.util.Arrays;
import java.util.Comparator;
public class Taxis {
public static void main(String[]args) {
int [][]arrs=new int[][] { //创建二维数组
{2,3,7},
{6,4,9},
{1,8,5}
};
Arrays.sort(arrs, new Comparator<int[]>() { //定义比较方式:对数组每行的第一个数进行比较
public int compare(int[] arrs1, int[] arrs2) {
return arrs1[0] - arrs2[0];
}
});
for(int i=0;i<arrs.length;i++) { //输出结果
for(int j=0;j<arrs[0].length;j++) {
System.out.print(arrs[i][j]+" ");
}
System.out.println();
}
}
}
Output:
1 8 5
2 3 7
6 4 9
按照一定方式对类进行比较:
import java.util.Arrays;
import java.util.Comparator;
class Circle{ //自定义Circle类
double r;
public Circle(double r) {
this.r=r;
}
public double area() {
return 3.14*r*r;
}
}
class AreaComparator implements Comparator<Circle> { //自定义AreaComparator类实现Comparator接口
@Override
public int compare(Circle c1, Circle c2) { //按照圆的面积进行升序排序
return (c1.area()-c2.area())>=0?1:-1;
}
}
public class Taxis {
public static void main(String[]args) {
Circle c1=new Circle(5);
Circle c2=new Circle(1);
Circle c3=new Circle(2);
Circle[] c_arr= {c1,c2,c3}; //定义Circle数组
Arrays.sort(c_arr, new AreaComparator()); //按照圆的面积进行比较
for(int i=0;i<c_arr.length;i++) { //输出结果
System.out.println(c_arr[i].area()+" ");
}
}
}