1.对一维数组排序
1.1升序
public class Main {
public static void main(String[] args) {
int[] arr= {5,2,9,1,5};
//升序
Arrays.sort(arr);
for(int i=0;i<5;i++) {
System.out.print(arr[i]+" ");
}
}
}
1.2指定范围的升序
import java.util.Arrays;
import java.util.Scanner;
public class qq {
public static void main(String[] args) {
int[] arr= {5,2,9,1,5};
//升序
Arrays.sort(arr,1,4); // 对索引1到3(不包含4)的元素排序
for(int i=0;i<5;i++) {
System.out.print(arr[i]+" ");//5 1 2 9 5
}
}
}
1.3降序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
public static void main(String[] args) {
//必须Integer或字符串数组
Integer[] arr= {5,2,9,1,5};
//升序
Arrays.sort(arr,Comparator.reverseOrder()); // 对索引1到3(不包含4)的元素排序
for(int i=0;i<5;i++) {
System.out.print(arr[i]+" ");//5 1 2 9 5
}
}
}
1.4指定范围的降序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
public static void main(String[] args) {
//必须Integer或字符串数组
Integer[] arr= {5,2,9,1,5};
//升序
Arrays.sort(arr,1,4,Comparator.reverseOrder()); // 对索引1到3(不包含4)的元素排序
for(int i=0;i<5;i++) {
System.out.print(arr[i]+" ");//5 1 2 9 5
}
}
}
2.对二维数组排序
2.1升序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
public static void main(String[] args) {
//不用Integer也行
int[][] arr = {
{3, 4, 3},
{1, 9, 7},
{5, 6, 8}
};
//升序
//对第几个元素排序就a[j]-b[j]
Arrays.sort(arr, (a, b) -> a[2] - b[2]);
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
2.2降序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
public static void main(String[] args) {
//不用Integer也行
int[][] arr = {
{3, 4, 3},
{1, 9, 7},
{5, 6, 8}
};
//降序
//对第几个元素排序就b[j]-a[j]
Arrays.sort(arr, (a, b) -> b[2] - a[2]);
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
2.3指定范围降序或升序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
public static void main(String[] args) {
//不用Integer也行
int[][] arr = {
{3, 4, 3},
{1, 9, 7},
{5, 6, 8},
{2, 5, 1},
{4, 3, 9}
};
// 对索引1到3(不包含3)的行,按第2列(索引1)降序排序
Arrays.sort(arr, 1, 3, (a, b) -> b[2] - a[2]);
//对索引1到3(不包含3)的行,按第2列(索引1)升序排序
//Arrays.sort(arr, 1, 3, (a, b) -> a[2] - b[2]);
for(int i=0;i<5;i++) {
for(int j=0;j<3;j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
/*
3 4 3
5 6 8
1 9 7
2 5 1
4 3 9
*/
}
}
3.对类元素排序
3.1多条件排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
static class Node{
int a;
int b;
Node(int a,int b){
this.a=a;
this.b=b;
}
}
public static void main(String[] args) {
Node [] arr=new Node[4];
arr[0]=new Node(1,3);
arr[1]=new Node(6,4);
arr[2]=new Node(3,4);
arr[3]=new Node(5,1);
//根据b升序,若b相同再根据a升序
Arrays.sort(arr,new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
int com=Integer.compare(o1.b, o2.b);
//如果是降序就换一下
//int com=Integer.compare(o2.b, o1.b);
if(com!=0) {
return com;
}
return Integer.compare(o1.a, o2.b);
//如果是降序就换一下
//return Integer.compare(o2.a, o1.b);
}
});
for(int i=0;i<4;i++) {
System.out.println(arr[i].a+" "+arr[i].b);
}
}
}
3.2单条件排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class qq {
static class Node{
int a;
int b;
Node(int a,int b){
this.a=a;
this.b=b;
}
}
public static void main(String[] args) {
Node [] arr=new Node[4];
arr[0]=new Node(1,3);
arr[1]=new Node(6,4);
arr[2]=new Node(3,4);
arr[3]=new Node(5,1);
//根据b升序
Arrays.sort(arr,new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
int com=Integer.compare(o1.b, o2.b);
//如果是降序就换一下
//int com=Integer.compare(o2.b, o1.b);
return com;
}
});
for(int i=0;i<4;i++) {
System.out.println(arr[i].a+" "+arr[i].b);
}
}
}