Как мне создать функцию, которая может принимать массив любого объекта и сортировать его? - PullRequest
0 голосов
/ 29 апреля 2020

Мой учитель информатики дал мне задачу создать функцию, которая может принимать массив любого объекта и сортировать его с помощью пузырьковой сортировки. Так как класс Object является родительским классом для всех классов, я подумал о том, чтобы взять массив Objects, но я не могу его отсортировать, поскольку класс 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, поэтому любая помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

Вы на правильном пути со своей растерянностью! Действительно, не все объекты имеют компаратор и, следовательно, несопоставимы; Похоже, ваш учитель хочет, чтобы ваш метод отклонял подобные объекты.

Вы можете заставить метод bubble принимать только Comparable объекты следующим образом:

public static <T extends Comparable<? super T>> void bubble(T[] arr)

Этот заголовок метода использует концепцию java, называемую generics - в основном переменную, которая представляет тип, а не объект. В этом случае ваша переменная generi c равна T. Таким образом, если бы метод вызывался с bubble(new Box[]), тогда T будет представлять тип Box.

. <T extends Comparable<? super T>> говорит: «T должен реализовать Comparable, который может сортировать T "Вы можете прочитать подробнее здесь .

...