我的计算机科学老师给了我一个挑战,让我创建一个可以接收任何对象的数组并使用气泡排序的函数。因为Object类是所有类的父类,所以我想到了接收一个Object的数组,但是由于Object类没有可比性,所以我无法真正的进行排序。我现在有点犯难了,因为我不知道该给函数传入什么。我的老师说,我应该传入一个Comparable接口,但我恐怕还不知道他说的是什么意思。
这是我试过的,但我知道这行不通。
public static void bubble(Object arr[]) {
for (int i = 0; i < arr.length - 1; i ++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j].compareTo(arr[j + 1]) > 0) {
Object temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
我对Java了解不多 所以我非常感激任何帮助,谢谢!
你的困惑是对的! 的确,并不是所有的对象都有比较器,因此是不能比较的,听起来老师希望你的方法能拒绝这样的对象。
你可以执行 bubble
方法,只接受 Comparable
对象,如下所示。
public static <T extends Comparable<? super T>> void bubble(T[] arr)
这个方法头利用了一个java概念,叫做 仿制药-- 基本上是一个代表类型的变量,而不是一个对象。在这种情况下,你的通用变量是 T
. 因此,如果该方法被调用时带有 bubble(new Box[])
那么 T
将代表该类型 Box
.
该 <T extends Comparable<? super T>>
说:"T
必须实施 Comparable
可以 T
" 您可以阅读更多 此处.