Java Collections.sort和Arrays.sort使用comparator或者comparable接口的compare函数返回值

一直比较苦恼这一块,因为Comparator或comparable接口中的抽象方法compare都返回的是一个int,而该int又有三个取值,分别是0,小于0和大于0,今天查资料才明白排序的具体含义:

1.Collections.sort()方法调用Arrays.sort()方法:

Java Collections.sort和Arrays.sort使用comparator或者comparable接口的compare函数返回值_第1张图片

2.Arrays.sort有一个分支判断:

Java Collections.sort和Arrays.sort使用comparator或者comparable接口的compare函数返回值_第2张图片

其中legacyMergeSort.userRequested如果为true,表示“用户请求传统的归并排序”。

3.legacyMergeSort即使用归并排序的方式进行排序:

Java Collections.sort和Arrays.sort使用comparator或者comparable接口的compare函数返回值_第3张图片

我们可以看到在该处会对比较器c进行判断是否为空,如果为空,那么就使用自然序,如果不为空,即用户自定义了排序方式,那么将使用用户自定义的排序方式,当然,也就是我所关系的根据返回值判断是否对集合中相邻两个元素进行换位。另外,在传参的时候,前两个参数分别是待排序数组的克隆和待排序数组。

4.在归并排序中有这样一段代码:

Java Collections.sort和Arrays.sort使用comparator或者comparable接口的compare函数返回值_第4张图片

此处,如果前一个元素compareTo后一个元素的结果大于0(同时满足其他条件的情况下),需要对前一个元素和后一个元素进行换位,也就是说,当compareTo的返回值大于0的时候,进行元素的移位,其他情况,不作处理。

你可能感兴趣的:(Java Collections.sort和Arrays.sort使用comparator或者comparable接口的compare函数返回值)