java sort方法详解

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<? super T> c)
    根据指定的比较器指定的顺序,对指定的对象数组进行排序。

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

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

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

comparator比较器

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

    这里以int a[]数组为例
    Arrays.sort(a, new Comparator<int[]>() {
        @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] = 2
point[1] = 1
point[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<int[]>() {
//            @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());
        }

    }
}
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Java中的sort排序可以使用Arrays类的sort方法来实现。这个方法可以用于排序基本类型数组和对象类型数组。当然,你也可以使用Collections类的sort方法来对集合进行排序。 在对基本类型数组进行排序时,可以直接使用Arrays.sort方法。例如,对一个整型数组进行升序排序,可以按照以下步骤进行操作: 1. 定义一个int类型的数组arr,并初始化数组元素。 2. 调用Arrays类的sort方法对数组进行排序。 3. 使用循环遍历数组,打印排序后的结果。 代码示例: ```java int[] arr = {1, 4, 6, 333, 8, 2}; Arrays.sort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` 对于对象类型数组的排序,可以使用Arrays类的sort方法和Comparator接口。Comparator接口用于定义对象的比较规则。你可以创建一个实现了Comparator接口的类,并在其中重写compare方法来定义比较规则。 以下是一个使用Comparator接口进行降序排序的示例代码: ```java public class Main { public static void main(String[] args) { Integer[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1}; Comparator<Integer> cmp = new CMP(); Arrays.sort(arr, cmp); for (int i : arr) { System.out.println(i); } } } class CMP implements Comparator<Integer> { @Override public int compare(Integer a, Integer b) { return b - a; } } ``` 另外,如果你想要对对象类型数组进行降序排序,可以使用Collections类的reverseOrder方法。以下是一个使用Collections类进行降序排序的示例代码: ```java public class Main { public static void main(String[] args) { Integer[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1}; Arrays.sort(arr, Collections.reverseOrder()); for (int i : arr) { System.out.println(i); } } } ``` 通过以上的代码示例,你可以实现对不同类型的数组进行排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java排序方法sort的使用详解](https://blog.csdn.net/weixin_39552097/article/details/121100915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AC Maker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值