1.一维数组降序排列(一维数组的类型不能为基本数据类型,应该将其转为它的包装类,再进行重写)
import java.util.Arrays; import java.util.Comparator; public class Main { public static void main(String[] args) { int[] nums1= {2,9,2,45,-3,6}; Integer[] nums2=new Integer[nums1.length]; for(int i=0;i<nums1.length;i++) { nums2[i]=(Integer)nums1[i]; } //Arrays.sort() 默认升序排序 //重写法一: // Arrays.sort(nums2, new Comparator<Integer>() { // @Override // public int compare(Integer o1, Integer o2) { // return o2 - o1; // } // }); //重写法二: Arrays.sort(nums2,(o1,o2)->(o2-o1)); //降序输出 System.out.println(Arrays.toString(nums2)); //[45, 9, 6, 2, 2, -3] } }
2.一维列表降序排列
import java.util.ArrayList; import java.util.List; import java.util.Collections; public class Main{ public static void main(String[] args){ List<Integer> elem=new ArrayList<>(); elem.add(1); elem.add(5); elem.add(2); //Collections.sort() 默认升序排序 //升序 Collections.sort(elem); //Collections.sort(elem,(o1,o2)->(o1-o2)); System.out.println(elem); //[1, 2, 5] //降序 Collections.sort(elem,(o1,o2)->(o2-o1)); System.out.println(elem); //[5, 2, 1] } }
3.二维数组排列
例:根据排序intervals数组元素的的0位元素大小排序
法一:冒泡排序(用时较少)
//根据排序intervals数组元素的的0位元素大小排序 int[] temp; for(int i=0;i<intervals.length;i++) { for(int j=0;j<intervals.length-i-1;j++) { if(intervals[j][0]>intervals[j+1][0]) { temp=intervals[j]; intervals[j]=intervals[j+1]; intervals[j+1]=temp; } } }
法二:使用Arrays结合lambda表达式排序(用时较短)
import java.util.Arrays; import java.util.Comparator; public class Main { public static void main(String[] args) { int[][] intervals = {{2,6},{15,18},{1,3},{3,10}}; //根据排序intervals数组元素的的0位元素大小排序 //重写法一: //Arrays.sort(intervals, (o1,o2) -> Integer.compare(o1[0],o2[0]) ); //升序:[[1, 3], [2, 6], [3, 10], [15, 18]] //Arrays.sort(intervals, (o1,o2) -> Integer.compare(o2[0],o1[0]) ); //降序:[[15, 18], [3, 10], [2, 6], [1, 3]] //重写法二: Arrays.sort(intervals, (o1,o2) -> (o1[0]-o2[0]) ); //升序:[[1, 3], [2, 6], [3, 10], [15, 18]] Arrays.sort(intervals, (o1,o2) -> (o2[0]-o1[0]) ); //降序:[[15, 18], [3, 10], [2, 6], [1, 3]] System.out.println(Arrays.deepToString(intervals)); //[[1, 3], [2, 6], [3, 10], [15, 18]] } }
4、二维列表排序
import java.util.ArrayList; import java.util.List; import java.util.Collections; public class Main{ public static void main(String[] args){ List<Integer> elem1=new ArrayList<>(); elem1.add(1); elem1.add(5); elem1.add(2); List<Integer> elem2=new ArrayList<>(); elem2.add(6); elem2.add(4); List<Integer> elem3=new ArrayList<>(); elem3.add(3); elem3.add(8); elem3.add(3); List<Integer> elem4=new ArrayList<>(); elem4.add(12); elem4.add(3); Collections.sort(elem1,(o1,o2)->(o1-o2)); List<List<Integer>> list=new ArrayList<>(); list.add(elem1); list.add(elem2); list.add(elem3); list.add(elem4); //根据子列表的0位元素大小排序 //升序 Collections.sort(list,(o1,o2)->(o1.get(0)-o2.get(0))); System.out.println(list); //[[1, 2, 5], [3, 8, 3], [6, 4], [12, 3]] //或 Collections.sort(list,(o1,o2)->(o1.get(0).compareTo(o2.get(0)))); System.out.println(list); //[[1, 2, 5], [3, 8, 3], [6, 4], [12, 3]] //降序 Collections.sort(list,(o1,o2)->(o2.get(0)-o1.get(0))); System.out.println(list); //[[12, 3], [6, 4], [3, 8, 3], [1, 2, 5]] //或 Collections.sort(list,(o1,o2)->(o2.get(0).compareTo(o1.get(0)))); System.out.println(list); //[[12, 3], [6, 4], [3, 8, 3], [1, 2, 5]] } }