Java篇—Arrays.sort()用法理解

Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,可以直接调用。

注:数组类型是Object(),即sort()的参数类型也为Object。本文中以int型数组为例。

用法1:

Arrays.sort(int[] a)

它是对数组的所有元素进行升序排序,即将数组中的元素按照从小到大进行排序。

代码实现:

import java.util.Arrays;
public class Exercise10 {
    public static void main(String[] args) {
        int[] data = {5,2,0,1,3,1,4};
        Arrays.sort(data);
        for (int temp:data) {
            System.out.print(temp + " ");
        }
        System.out.println();
    }
}

运行结果:

结果说明:output为数组data的升序排序。

用法2:

Arrays.sort(int[] a, int fromIndex, int toIndex)

它是对数组部分元素进行升序排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序—[fromIndex,toIndex)

注意:下标为toIndex的元素不参与排序!

代码实现:

import java.util.Arrays;
public class Exercise10 {
    public static void main(String[] args) {
        int[] data = {5,2,0,1,3,1,4};
        Arrays.sort(data,1,4);
        for (int temp:data) {
            System.out.print(temp + " ");
        }
        System.out.println();
    }
}

运行结果:

结果说明:output只是把数组data下标为0到3的元素进行了升序排序,由2 0 1变为了0 1 2。

上面的两种用法很容易发现一个问题,那就是数组没有办法进行降序排序,如果想进行降序排序该怎么办呢?

用法3:

public static void sort(T[] a, Comparator c)

注:根据指定的比较器引发的顺序对指定的对象数组进行排序

public static void sort(T[] a,int fromIndex,int toIndex, Comparator c)

注:根据指定的比较器引发的顺序对指定的对象数组的指定范围进行排序

代码实现:

import java.util.Arrays;
import java.util.Comparator;
public class Exercise10 {
    public static void main(String[] args) {
        //注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
        //而要使用它们对应的类
        Integer[] data = {5,2,0,1,3,1,4};
        //new一个MyComparator的对象
        MyComparator myComparator = new MyComparator();
        Arrays.sort(data,myComparator);
        for (int temp:data) {
            System.out.print(temp + " ");
        }
        System.out.println();
    }
}

class MyComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        //降序
        return o2 - o1;
    }
}

运行结果:

结果说明:output为数组data的降序排序。

为什么实现了Comparator接口,就能实现降序排序呢?

实现Comparator接口:升序是前者减去后者(o1 - o2),降序是后者减去前者(o2 - o1)。记住!!!

实现Comparator接口,升序代码实现如下,作用同用法1

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author:QJJia
 * @date:2019/7/27 0:40
 * @description:Arrays.sort()用法理解
 */
public class Exercise10 {
    public static void main(String[] args) {
        //注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
        //而要使用它们对应的类
        Integer[] data = {5,2,0,1,3,1,4};
        //new一个MyComparator的对象
        MyComparator myComparator = new MyComparator();
        Arrays.sort(data,myComparator);
        for (int temp:data) {
            System.out.print(temp + " ");
        }
        System.out.println();
    }
}

class MyComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        //升序
        return o1 - o2;
    }
}

运行结果:

结果说明:output与用法1相同,都为数组data的升序排序。

用法4:

lambda表达式实现升序排序(Arrays.sort(data, (o1, o2) -> o1 - o2);),

lambda表达式实现降序排序(Arrays.sort(data, (o1, o2) -> o2 - o1);),

另一种写法:

需要导入util包下的Comparator类,

lambda表达式实现升序排序(Arrays.sort(data1, (o1, o2) -> o1.compareTo(o2);

lambda表达式实现降序排序(Arrays.sort(data2, (o1, o2) -> o2.compareTo(o1));

代码实现:

import java.util.Arrays;
import java.util.Comparator;
public class Exercise10 {
    public static void main(String[] args) {
        Integer[] data1 = {5,2,0,1,3,1,4};
        Integer[] data2 = {5,2,0,1,3,1,4};
        //升序排序,写法1
        Arrays.sort(data1, (o1, o2) -> o1 - o2);
        //写法2
        //Arrays.sort(data1, (o1, o2) -> o1.compareTo(o2));
        //降序排序,写法1
        //Arrays.sort(data2, (o1, o2) -> o2 - o1);
        //写法2
        Arrays.sort(data2, (o1, o2) -> o2.compareTo(o1));
        System.out.println("lambda表达式实现升序排序:");
        System.out.println(Arrays.toString(data1));
        System.out.println("lambda表达式实现降序排序:");
        System.out.println(Arrays.toString(data2));
    }
}

运行结果:

结果说明:output升序同用法1,用法3,output降序同用法3

lambda表达式详解:

https://www.cnblogs.com/knowledgesea/p/3163725.html

           Arrays.sort()的深入理解:

Arrays.sort() ----- DualPivotQuicksorthttps://www.cnblogs.com/wuweishuo/p/10648039.html

Arrays.sort() ----- TimSorthttps://www.cnblogs.com/wuweishuo/p/10646045.html

心灵鸡汤:将来的你一定会感谢现在拼命的自己!

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值