java - 类似的接口(interface)

标签 java interface comparable

为什么实现 Comparable 接口(interface)比仅仅定义我自己的 compareTo() 方法更有好处?

另一件事,java.util.Arrays.sort(Object[] o)方法如何与Comparable接口(interface)相关,这样我就必须实现Comparable接口(interface)能够使用 Arrays.sort(Object[] o) 方法吗?

最佳答案

Why is it beneficial to implement the Comparable interface instead of just defining my own compareTo method?

您可以定义自己的方法,但所有需要比较的类都必须知道它。 Java api中有Comparable用于此目的,并且所有人都知道它。可比较接口(interface)是许多类的父类(super class)型,无论其来源如何。因此,它在所有主要框架中都得到普遍使用。

Another thing, how does the java.util.Arrays.sort(Object[] o) method relate to the Comparable interface such that I HAVE to implement the Comparable interface to be able to use the Arrays.sort(Object[] o) method?

Arrays.sort() 方法内部调用 Comparable 类的 compareTo() 方法对内容进行排序。

查看Arrays.sort()的源码,委托(delegate)方法使用 Comparabble#compareTo() 方法

private static void mergeSort(Object[] src,
                  Object[] dest,
                  int low,
                  int high,
                  int off) {
    int length = high - low;

    // Insertion sort on smallest arrays
        if (length < INSERTIONSORT_THRESHOLD) {
            for (int i=low; i<high; i++)
                for (int j=i; j>low &&
             ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
                    swap(dest, j, j-1);
            return;
        }

        // Recursively sort halves of dest into src
        int destLow  = low;
        int destHigh = high;
        low  += off;
        high += off;
        int mid = (low + high) >>> 1;
        mergeSort(dest, src, low, mid, -off);
        mergeSort(dest, src, mid, high, -off);

        // If list is already sorted, just copy from src to dest.  This is an
        // optimization that results in faster sorts for nearly ordered lists.
        if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {
            System.arraycopy(src, low, dest, destLow, length);
            return;
        }

        // Merge sorted halves (now in src) into dest
        for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
            if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
                dest[i] = src[p++];
            else
                dest[i] = src[q++];
        }
    }

关于java - 类似的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091880/

相关文章:

Java长计算不卡住GUI(在单线程中)

java - ActiveMQ中的setBackOffMultiplier(double backOffMultiplier)是如何工作的

TypeScript:接口(interface)方法实现

interface - 如何在 F# 中检查对象是否实现接口(interface)

Java:使用 >、< 和 == 比较对象

java - 模拟打开网页-Java

java - 可打包对象中的数组列表

java - Java 接口(interface)中的可选方法

java - 使用泛型为对象数组绑定(bind)不匹配错误