为什么我需要可比较的接口而不是在 java 中创建我的自定义方法

Comparable是一个可以实现到类中的接口,我不明白的是为什么我需要实现接口才能Arrays.sort在我的类中使用。我可以调用 ,Arrays.sort而不必在Comparable我的类中实现接口。

此外,接口无论如何都提供了一个空方法,以便我可以指定自己的操作。我已经阅读了关于可比性的其他答案,他们都说原因是为了让我的编码更容易。怎么那么容易呢compareTo,我必须定义一个空代码,所以无论如何这有什么帮助,我可以定义自己的代码并将其命名为我想要的任何名称。

我很确定这背后有一个很好的理由。然而,我无法理解它,这真的让我感到不安,有人可以用“不是代码示例”的例子向我解释它。请用非常简单的英语,以及为什么重要以及它如何节省我的时间。提前致谢


暮色呼如
浏览 134回答 3
3回答

沧海一幻觉

以这些数字为例:4, 7, 2, 7, 42, 3, 4 ,9 和 5。假设我要求你对它们进行排序。你会怎么做?您是按升序、降序还是使用其他方法对它们进行排序。那么答案是,您不会知道如何对它们进行排序,因为我没有为您提供足够的信息。Arrays.sort处于类似的未知位置。你想让它为你排序一些东西,但简单地说,Arrays.sort不知道如何排序。您必须解释Arrays.sort您希望数组如何排序。你解释这个的方式Arrays.sort是实现Comparable接口。至于这种设计如何为您节省时间。嗯,它以一种微妙的方式这样做:如果您实现Comparable,那么您会自动使用任何知道如何使用 的方法(想想算法)Comparable。这同样适用于实现其他接口。

偶然的你

将public static void sort(Object[] a)在所有对象必须实现的Javadoc指定的方法Comparable接口。这是在实现中假设的,您可以在其中找到下一行。Comparable pivot = (Comparable) a[start];如果您的元素未实现可比较,则会产生运行时异常。其他sort方法要么用于本质上具有可比性的类型(例如,原始类型),要么需要您提供Comparator.

猛跑小猪

尽管您有Arrays.sort((T[] a, Comparator<? super T> c))接受显式的方法Comparator,但您不希望定义内联Comparator或创建特殊Comparator类来保持代码紧凑和可读。休息是你的选择。你有两种选择,选择适合你的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java