interface Comporator как использовать в параметрах метода java
Задача стоит такая: Добавить НЕ СТАТИЧЕСКИЙ метод void sort(Comparator<.......> comparator). Данный метод занимается сортировкой данных записанных в поле data используя реализацию сравнения из ПЕРЕДАННОГО объекта comparator.
В общем у меня есть класс
public class DataContainer <T>{
private T[] data;
public void sort(Comparator<? extends T> comporator){
Мне нужно реализовать этот метод что бы он сортировал поле дата. В параметрах метода в дженериках к Comporator<.....> comporator. я поставил ? extends T не зная что по ставить, в задании там стоит многоточие
}
}
Помогите понять смысл реализации метода и надо ли реализовать тут в классе метод
compare? Спасибо за помощь)))введите сюда код
Ответы (1 шт):
Смысл любого компаратора в том, чтобы реализовать сортировку. В вашем случае конкретно указано, что сортировать нужно массив T, посему и дженерик компаратора будет типизирован T. Разумеется, в Java из коробки уже есть инструменты сортировки как массивов, так и коллекций. В нашем случае это массив, посему используем статические методы утилитного класса Arrays, в частности Arrays.sort. Данный метод может принимать 1 параметр (сам массив, который необходимо отсортировать) либо 2 аргумента (второй и есть компаратор). Первый способ вполне подойдет, к примеру, для Integer либо String. В этом случае нет проблем с реализацией сортировки - числа расположаться в порядке возрастания, а строки - в алфавитном порядке. Но в нашем случае заранее неизвестно, что именно будет хранить массив T, ведь это дженерик. Вполне возможно это будут кастомные объекты, например, хранящие информацию о человеке. И в этом случае непонятно, как именно их сортировать. Возможно, мы хотим выполнить сортировку по фамилии, а может быть по возрасту и т.д. Именно для этого и нужен компаратор, который определит порядок сортировки. Посему реализация будет выглядеть так:
import java.util.Arrays;
import java.util.Comparator;
public class DataContainer<T> {
private T [] data;
public void sort(Comparator<T> comporator) {
Arrays.sort(data, comporator);
}
}
Если что-то не ясно - задавайте свои вопросы. Удачи в изучении!