如何创建一个可以接收任意对象的数组并进行排序的函数?

问题描述 投票:0回答:1

我的计算机科学老师给了我一个挑战,让我创建一个可以接收任何对象的数组并使用气泡排序的函数。因为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了解不多 所以我非常感激任何帮助,谢谢!

java arrays bubble-sort
1个回答
0
投票

你的困惑是对的! 的确,并不是所有的对象都有比较器,因此是不能比较的,听起来老师希望你的方法能拒绝这样的对象。

你可以执行 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" 您可以阅读更多 此处.

© www.soinside.com 2019 - 2024. All rights reserved.