Arrays.sort方法和接口中compareTo方法的联系?
Topic source找到了:
```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; }}
```
当时问狗屁通,他说
这种接口的存在可以将不同的类连接起来,只要它们都实现了相同的接口,就可以使用相同的比较方式来处理它们。这使得代码更加通用和可重用,因为不同类的对象可以在相同的上下文中进行比较和排序。
在你的示例中,Person
类实现了 Comparable<Person>
接口,这意味着你可以使用 Arrays.sort
等排序方法来对 Person
对象进行排序,而不必担心如何编写具体的比较逻辑。这个接口充当了一个连接不同类的桥梁,通过相同的契约来实现比较操作。这有助于提高代码的可维护性和可扩展性。
所以接口的用法并不只是在字面意思上的连接其他程序
确实,接口在编程中的作用远不止于字面意思上的连接其他程序。接口是一种关键的抽象机制,用于定义一组行为或契约,使不同类之间能够遵守相同的规范和协议。以下是接口在编程中的一些主要用途:
-
定义契约和规范:接口定义了类应该提供的一组方法或行为,这些方法的签名被指定,但实际的实现留给了实现接口的类。这有助于确保类遵循某种规范。
-
实现多态:接口允许不同类实现相同的接口,从而在相同的上下文中使用它们。这支持多态性,使你可以编写通用的代码,可以处理不同的对象类型。
-
减少耦合度:接口可以降低类之间的耦合度,因为类只需要关注接口定义的行为,而不需要了解其他类的具体实现细节。这有助于提高代码的模块化和可维护性。
-
实现回调机制:接口可以用于实现回调(Callback)机制,其中一个类通过接口向另一个类注册回调方法,从而在特定事件发生时调用注册的方法。
-
定义抽象数据类型:接口可以用于定义抽象数据类型,描述了一组相关操作,但没有提供具体的实现。这有助于将数据结构与操作分离开来。
总之,接口是一种强大的工具,用于建立代码的抽象、模块化和可扩展性。它们不仅仅是连接其他程序的工具,还是定义规范、支持多态性、降低耦合度等多种编程任务的关键机制。
不知道对不对,我现在暂时这么理解了,如果有错误踹我一下,谢谢大佬
- 1
PBC
为什么实现了Comparable<T>接口的compareTo方法就可以通过调用Arrays.sort方法来达到排序的目的