踩坑笔记 —— Arrays.sort()方法

Arrays.sort()方法是一个java自带的为数组排序的方法,排序方法为双轴快排(具体双轴快排可以自行百度一下,后续有精力的话我也会总结一篇该算法的文章),虽然一直知道这个方法但是其实很少用到,今天在刷leetcode的时候正好碰到一道题,在解题过程中我使用了带参数的sort方法 —— sort(int[] a, int fromIndex, int toIndex),看参数名称也很好理解,应该就是为传入数组的一部分数据排序,结果这一用果然出错了,数据没有按照我想要的结果排列出来。第一次测试的时候测试用例比较小,数组里只有三个整数,待排序的只有两个,从结果上来看发现sort方法完全没起作用,后来将测试用例扩大,发现原来是只有最后一位数字未被排序,而其他数字都被排序了,那么原因就很好猜测了,应该是这个toIndex的值我传入的不对,点开sort方法源码:

    public static void sort(int[] a, int fromIndex, int toIndex) {
        rangeCheck(a.length, fromIndex, toIndex);
        DualPivotQuicksort.sort(a, fromIndex, toIndex - 1, null, 0, 0);
    }

很清楚的看到最终去排序的是fromIndex到toIndex - 1,里面的方法我虽然没有细看,但是从结果上可以很容易的推断是我传值出了错,我误以为toIndex是控制排序到第几位,所以为了避免数组越界特意传入了nums.length - 1,结果多此一举导致最后一位数字不会被排序,改正之后程序顺利的跑通了。

不知道api设计的初衷是什么,因为java还有类似的其他一些方法例如subString也是类似的取值范围,只不过由于数据结构的差异subString中计算了endIndex和beginIndex的差,然后当作offset的值传入后续代码中了,有兴趣的可以点一下subString源码看一下,但是在我使用的过程中确实因为toIndex参数的名字而产生了误会,加上对于原生api的不熟悉导致了错误,这里小小的记录一下,希望今后不要因为这种api不熟的问题影响开发工作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值