int []和java相似[],何时使用?

时间:2016-03-01 14:56:36

标签: java

当我实现Merge Sort时,我发现了这段代码:

    public static void merge(Comparable[] a, int lo, int mid, int hi)
    { // Merge a[lo..mid] with a[mid+1..hi].
        int i = lo, j = mid+1;
        for (int k = lo; k <= hi; k++) // Copy a[lo..hi] to aux[lo..hi].
            aux[k] = a[k];
        for (int k = lo; k <= hi; k++) // Merge back to a[lo..hi].
            if (i > mid) 
                a[k] = aux[j++];
            else if (j > hi )
                a[k] = aux[i++];
            else if (less(aux[j], aux[i]))
                a[k] = aux[j++];
            else 
                a[k] = aux[i++];
     }

<小时/> 这个逐个合并子数组!但令我困惑的是,在参数中,为什么Comparable[] a在使用int[] a仍然可以解决时使用了Comparable[]。在这种情况下,Comparable的使用是否会添加任何性能调整? 从其他答案我发现,

  

如果要定义默认(自然)排序,请使用Comparable   有问题的对象的行为,通常的做法是使用a   对象的技术或自然(数据库?)标识符。

     

如果要定义外部可控排序,请使用Comparator   行为,这可以覆盖默认的排序行为。

问题是git的使用是否会提高此代码的效率?

1 个答案:

答案 0 :(得分:0)

使用Comparable[]并不会提高您显示的代码的效率。

您展示的代码适用于任何可比较的对象数组,而不仅仅是int s。

所有差异都可以在less方法执行中注意到,这在您的问题中没有显示,但我认为它类似于return a.compareTo(b) < 0;

如果注意到任何效率差异,则可能是由于compareTo对象的Comparable方法实现所致。