文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java sort方法详解

2023-08-30 15:14

关注

JAVA

ARRAYS.SORT 方法

    static void sort(ElementType[] a)    默认为升序排序    static void sort(ElementType[] a, int FromIndex, int ToIndex)    在指定范围(FromIndex, ToIndex)内升序排序    static void sort(T[] a, Comparator c)    根据指定的比较器指定的顺序,对指定的对象数组进行排序。

这里对指定顺序的sort详细记录。

底层原理:插入排序+二分查找

开始的默认0索引的数据是有序序列,然后遍历数组后面的每一个元素,将每一个元素插入到前面有序序列的指定地方。

comparator比较器

Comparator是一个接口,需要重写里面的compare函数。
这里可以使用匿名内部函数类

    这里以int a[]数组为例    Arrays.sort(a, new Comparator() {        @Override        public int compare(int[] o1, int[] o2) {            return [返回值];        }    });
  1. 返回值为负数:将o1与o2前面的数进行比较
  2. 返回值为正数,将o1与o2后面的数进行比较
  3. 返回值为0,同正数。

return o1 - o2;
升序:

  1. o1 > o2时将o1与o2后面的数进行比较
  2. o1 < o2时将o1与o2前面的数进行比较
  3. o1 == o2时可插入

return o2 - o1:
降序:

  1. o1 > o2时将o1与o2前面的数进行比较
  2. o1 < o2时将o1与o2后面的数进行比较
  3. o1 == o2时可插入
注意上面的查找比较的原理是二分查找

另外还有更加简单的Lambda表达式写法

    sort(数组名, 排序规则)    升序:    sort(arr, (x, y) -> x - y);    降序:    sort(arr, (x, y) -> x - y);

sort可以对各种对象进行排序,比如下面的二维数组:
a = { {3, 3}, {2, 2}, {4, 4}, {5, 5}, {1, 1} };

    以第一个元素为关键字进行升序排序时:    sort(a, (x, y) -> x[0] - y[0]);    结果为 a = {{1,1}, {2,2}, {3,3}, {4,4}, {5,5}}    以第一个元素为关键字进行降序排序时:    sort(a, (x, y) -> y[0] - x[0]);    结果为 a = {{5,5}, {4,4}, {3,3}, {2,2}, {1,1}}        如果要以第二个元素为关键字进行排序是,将x[0]-y[0]变为x[1]-y[1]即可

除了多维数组也可以对类选择关键字进行排序:

先定义一个类:class Point { //这里是否构造函数都可以    private int val;    public int getVal() {        return this.val;    }    public void setVal(int val) {        this.val = val;    }}public class testSort {    public static void main(String[] args) throws Exception {        Point[] point = new Point[3];        // 注意下面的初始化是必须的!!!        for(int i = 0; i < point.length; i ++)            point[i] = new Point();        for(int i = 0; i < point.length; i ++) {            point[i].setVal(i);        }        // 降序:        Arrays.sort(point, (x, y) -> y.getVal()- x.getVal());        for(int i = 0; i < point.length; i ++) {            System.out.printf("point[%d] = %d\n", i, point[i].getVal());        }    }}

结果:

point[0] = 2point[1] = 1point[2] = 0

测试代码:

import java.util.Arrays;import java.util.Comparator;class Point {    private int val;//    public void Point() {//        this.val = 3;//    }    public int getVal() {        return this.val;    }    public void setVal(int val) {        this.val = val;    }}public class testSort {    public static void main(String[] args) throws Exception {        int[][] a = new int[5][2];        for(int i = 0; i < 5; i ++) {            a[i][0] = i;            a[i][1] = i;        }        Arrays.sort(a, (x, y) -> (x[0] - y[0]));        System.out.println("-----------升序---------");        for(int i = 0; i < 5; i ++) {            System.out.printf("a[%d] = {%d %d}\n",i, a[i][0], a[i][1]);        }        System.out.println();        Arrays.sort(a, (x, y) -> (y[0] - x[0]));        System.out.println("-----------降序---------");        for(int i = 0; i < 5; i ++) {            System.out.printf("a[%d] = {%d %d}\n",i, a[i][0], a[i][1]);        }        System.out.println();        // 匿名函数方法//        Arrays.sort(a, new Comparator() {//            @Override//            public int compare(int[] o1, int[] o2) {//                return o1 - o2;//            }//        });        System.out.println("-------对类排序-----");        Point[] point = new Point[3];        // 注意下面的初始化是必须的!!!        for(int i = 0; i < point.length; i ++)            point[i] = new Point();        for(int i = 0; i < point.length; i ++) {            point[i].setVal(i);        }        // 降序:        Arrays.sort(point, (x, y) -> y.getVal()- x.getVal());        for(int i = 0; i < point.length; i ++) {            System.out.printf("point[%d] = %d\n", i, point[i].getVal());        }    }}

来源地址:https://blog.csdn.net/PoisonKiller/article/details/128341563

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯