在java中,Mergesort可以对double进行排序。具有可比性的问题

在java中,Mergesort可以对double进行排序。具有可比性的问题,java,double,mergesort,Java,Double,Mergesort,我有上面的mergesort算法代码。现在我想用它来排序一个双精度数组。但是,它抛出了一个错误:sortjava.lang.Comparable[]不能应用于double[]。我的问题是为什么会发生这种情况以及如何避免?在我的理解中,如果double实现了可比性,那么代码必须工作良好 类Double实现了comparable,但您似乎传递了一个Double数组。基本体根本不是对象,因此与可比较对象不兼容。如果它不是一个数组,而是一个单一的值,您不会注意到,因为它是自动的。我启动了double[]

我有上面的mergesort算法代码。现在我想用它来排序一个双精度数组。但是,它抛出了一个错误:sortjava.lang.Comparable[]不能应用于double[]。我的问题是为什么会发生这种情况以及如何避免?在我的理解中,如果double实现了可比性,那么代码必须工作良好

类Double实现了comparable,但您似乎传递了一个Double数组。基本体根本不是对象,因此与可比较对象不兼容。如果它不是一个数组,而是一个单一的值,您不会注意到,因为它是自动的。

我启动了double[]tmp=newdouble[10];然后用随机双精度填充它。现在,在尝试对“tmp”进行排序时,我看到了错误。传递一个基元数组有什么错?好吧,还有我自己的评论:基元根本不是对象,所以和接口不兼容。我希望提供的链接可能会突出这一点。这些链接不适合我。另外,我提供了确切的错误:sortjava.lang.Comparable[]不能应用于double[]是的,我最终看到了这一点。如果您在google上搜索primitive type for java,您可能会发现一些更深入的解释。实际上,定义一个Double[]d={1d,2d,3d}就足够了;来解决您的问题,但是您会错过这里发生的隐式装箱,而不是Double[]d={Double.valueOf1,Double.valueOf2,Double.valueOf3,};在这种情况下,您能否帮助我了解如何将MergeSort应用于int[],double[]等。?
public class MergeSort {

    private void sort(Comparable[] a, Comparable[] aux, int lo, int hi) {
        if (lo > hi) return;
        int mid = lo + (hi - lo)/2;
        sort(a, aux, mid + 1, hi);
        sort(a, aux, lo, mid - 1);
        merge(a, aux, lo, mid, hi);
    }

    public void sort(Comparable[] a) {
        Comparable[] aux = new Comparable[a.length];
        sort(a, aux, 0, a.length);
    }

    public void merge(Comparable[] a, Comparable[] aux,
                             int lo, int mid, int hi) {
        for (int i = 0; i <= hi; i ++) {
            aux[i] = a[i];
        }

        int i = lo, j = mid + 1;
        for (int k = 0; k < hi; k ++) {
            if (i > mid) aux[k] = a[j++];
            else if (j > hi) aux[k] = a[i++];
            else if (less(a[i], a[j])) aux[k] = a[i++];
            else aux[k] = a[j++];
        }
    }

    private boolean less(Comparable a, Comparable b) {
        if (a.compareTo(b) == -1) return true;
        return false;
    }
}