用Java排序数组

时间:2014-04-29 22:37:01

标签: java

如果我使用基于其元素的条件对Java数组进行排序会发生什么?

Point[] points = new Point[10];
Arrays.sort(temp, points[0].SLOPE_ORDER);

这会是递归电话吗?

SLOPE_ORDER是一个比较器:

public final Comparator<Point> SLOPE_ORDER = new SlopeOrder();       // YOUR DEFINITION HERE

private class SlopeOrder implements Comparator<Point>
{
    public int compare(Point p1, Point p2)
    {
         ...
    }
}

2 个答案:

答案 0 :(得分:4)

见这里:

Arrays.sort

  

实现注意事项:此实现是一个稳定的,自适应的迭代合并输出,当输入数组被部分排序时,需要远远少于n lg(n)的比较,同时在输入数组随机排序时提供传统mergesort的性能。如果输入数组几乎已排序,则实现需要大约n次比较。临时存储要求从几乎排序的输入数组的小常量到随机排序的输入数组的n / 2个对象引用不等。

所以答案是:不,它不是递归的。

答案 1 :(得分:1)

根据命名惯例和Array#sort的合同判断,SLOPE_ORDER是您正在使用的static final类的Point成员。具体来说,它是一个可以传递给sort方法的比较器。

要回答你的问题,不会有任何有趣的事情发生。

Arrays.sort(temp, points[0].SLOPE_ORDER);

points[0].SLOPE_ORDER评估为对象的引用,并使用其值作为参数来执行排序,而无需再次查看points[0](至少不是为了获取{{1} }}

如果SLOPE_ORDER同时为SLOPE_ORDERstatic,则可以将其替换为

final

结果将完全相同,代码更容易理解。