import java.util.Arrays; import java.util.Comparator; import java.util.Random; public class TestArrSort { public static void main(String[] aa) { // sort1(); // sort2(); // sort3(); myTestArraysSort(); } public static void sort1() { Integer[] nums = new Integer[10]; //数组下标范围是0-9 //随机数 Random random = new Random(); for (int i = 0; i < 10; i++) { //注意这里nums[i]是整数integer对象,不是整型int nums[i] = random.nextInt(1, 101); } //有必要系统研究一下Arrays类,当然前提是会用, /* * toStirng方法输出结果[70, 64, 45, 71, 83, 6, 44, 62, 85, 22] * println("["+nums[0]); * */ System.out.println("排序前:" + Arrays.toString(nums)); //升序排序,参数是Object类,使用了多态 Arrays.sort(nums); //排序后结果输出 System.out.println("升序排序后:" + Arrays.toString(nums)); //降序排序 //创建了一个接口,这个接口应该有一个方法比较compare //这就是规范 //然后我们覆盖方法之后就能排序了 。 //当然,是不是很疑惑,前面也排序了,但是没有new接口(其实接口也是不能new的,我们new的应该是一个具体实现类,具体我还需要学习。) //答案就是:前面的排序是人家默认就有的接口,这里是我们写方法覆盖前面方法 //不要忘了最终目的,实现降序排序 Arrays.sort(nums, new Comparator<Integer>() { @Override public int compare(Integer obj1, Integer obj2) { //前者减后者 // 注意obj1还是对象,不是整型值,这里绝对不是 5-1 那么简单 //如果是这样,那么是升序,也就是没有覆盖的方法 // return obj1-obj2; //后者减前者--最终实现降序排序 return obj2 - obj1; } }); System.out.println("降序排序后:" + Arrays.toString(nums)); //idea又给我提示了说有更简单的方法,于是我就用了一下,毕竟应该是更简单的方法思想更好。 //最终就是这样, 我的jdk版本是17,这里是jdk8的最重要的新特性Lambda 表达式 //具体我也不会,暂时没有学 //我研究了一下,找到了等价关系,我想升序,所以把用前者减后者了, /* * 等级关系就是 * 参数obj1,obj2一一对应,返回值obj1,obj2一一对应 ;->有点像新版的switch表达式<- * 注意这里obj1,obj2都是nums数组的元素,所以它们是Integer类,不是int * obj2 - obj1 绝对不能理解成简单的值相减 * */ Arrays.sort(nums, (obj1, obj2) -> obj1 - obj2); //测试-- System.out.println("升序排序后:" + Arrays.toString(nums)); //先给它降序一下 Arrays.sort(nums,
javaSE数组排序 java.util.Arrays.sort()
最新推荐文章于 2024-07-25 19:54:12 发布