Discuss / Java / Arrays.sort方法和接口中compareTo方法的联系?

Arrays.sort方法和接口中compareTo方法的联系?

Topic source

PBC

#1 Created at ... [Delete] [Delete and Lock User]

为什么实现了Comparable<T>接口的compareTo方法就可以通过调用Arrays.sort方法来达到排序的目的

PBC

#2 Created at ... [Delete] [Delete and Lock User]

找到了:

```java

private static void binarySort(Object[] a, int lo, int hi, int start) {    assert lo <= start && start <= hi;    if (start == lo)        start++;    for ( ; start < hi; start++) {        Comparable pivot = (Comparable) a[start];        // Set left (and right) to the index where a[start] (pivot) belongs        int left = lo;        int right = start;        assert left <= right;        /*         * Invariants:         *   pivot >= all in [lo, left).         *   pivot <  all in [right, start).         */        while (left < right) {            int mid = (left + right) >>> 1;            if (pivot.compareTo(a[mid]) < 0)                right = mid;            else                left = mid + 1;        }        assert left == right;        /*         * The invariants still hold: pivot >= all in [lo, left) and         * pivot < all in [left, start), so pivot belongs at left.  Note         * that if there are elements equal to pivot, left points to the         * first slot after them -- that's why this sort is stable.         * Slide elements over to make room for pivot.         */        int n = start - left;  // The number of elements to move        // Switch is just an optimization for arraycopy in default case        switch (n) {            case 2:  a[left + 2] = a[left + 1];            case 1:  a[left + 1] = a[left];                     break;            default: System.arraycopy(a, left, a, left + 1, n);        }        a[left] = pivot;    }}

```

泠水

#3 Created at ... [Delete] [Delete and Lock User]

当时问狗屁通,他说

这种接口的存在可以将不同的类连接起来,只要它们都实现了相同的接口,就可以使用相同的比较方式来处理它们。这使得代码更加通用和可重用,因为不同类的对象可以在相同的上下文中进行比较和排序。

在你的示例中,Person 类实现了 Comparable<Person> 接口,这意味着你可以使用 Arrays.sort 等排序方法来对 Person 对象进行排序,而不必担心如何编写具体的比较逻辑。这个接口充当了一个连接不同类的桥梁,通过相同的契约来实现比较操作。这有助于提高代码的可维护性和可扩展性。

所以接口的用法并不只是在字面意思上的连接其他程序

确实,接口在编程中的作用远不止于字面意思上的连接其他程序。接口是一种关键的抽象机制,用于定义一组行为或契约,使不同类之间能够遵守相同的规范和协议。以下是接口在编程中的一些主要用途:

  1. 定义契约和规范:接口定义了类应该提供的一组方法或行为,这些方法的签名被指定,但实际的实现留给了实现接口的类。这有助于确保类遵循某种规范。

  2. 实现多态:接口允许不同类实现相同的接口,从而在相同的上下文中使用它们。这支持多态性,使你可以编写通用的代码,可以处理不同的对象类型。

  3. 减少耦合度:接口可以降低类之间的耦合度,因为类只需要关注接口定义的行为,而不需要了解其他类的具体实现细节。这有助于提高代码的模块化和可维护性。

  4. 实现回调机制:接口可以用于实现回调(Callback)机制,其中一个类通过接口向另一个类注册回调方法,从而在特定事件发生时调用注册的方法。

  5. 定义抽象数据类型:接口可以用于定义抽象数据类型,描述了一组相关操作,但没有提供具体的实现。这有助于将数据结构与操作分离开来。

总之,接口是一种强大的工具,用于建立代码的抽象、模块化和可扩展性。它们不仅仅是连接其他程序的工具,还是定义规范、支持多态性、降低耦合度等多种编程任务的关键机制。

不知道对不对,我现在暂时这么理解了,如果有错误踹我一下,谢谢大佬


  • 1

Reply