一直想知道java是如何对集合中的元素是如何进行排序的,但是网上和书本上只是说使用比较器,返回int值,从而知道两个数的大小。我想问的是,然后呢?即使我知道了两个数的大小,接下来我不进行任何操作,集合中的元素还是没有进行排序。
首先明确目的:会自己编写比较规则。
疑问:compare(x,y)返回值小于0,大于0有什么用处呢
阅读Arrays.sort()源码可以得出以下排序规则:
1.compare(x,y)<0,代表第一个参数x比第二个参数y小。
2.第一个参数的索引肯定大于第二个参数的索引
3.最终返回的是按照(自定义比较规则)从小到大排序的数组
if (c.compare(a[runHi++], a[lo]) < 0) { // Descending
while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) < 0)
runHi++;
reverseRange(a, lo, runHi);
} else { // Ascending
while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) >= 0)
runHi++;
}
根据以上代码考虑极端情况:
compare(x,y)<0,就直接逆转整个数组。
例子:
compare(x,y)
返回 y-x :意思是前面比后面小,逆转之后,这不就是倒序吗
返回 x-y: 意识是后面比前面小,逆转之后, 这不就是升序吗
版权声明:本文为weixin_45414857原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。