Спасибо!
Ivan Zelenkov
28 уровень
Ребят, быстрый вопрос. Моя реализация верна? Там в условии нужно иметь тип первого параметра T. Я считаю, что это неверно. Как вам кажется?
Решен
Комментарии (24)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Flexo Bending Unit #3370318
3 мая 2021, 10:45
Смотря что возвращает метод getID(). Если int или long, то всё классно.
А вот что если это String или какой-то ссылочный тип, может быть даже собственный? Всяко бывает 🤔. Главное, чтобы он реализовал Comparable, конечно)
Иван, вопрос не по теме, вам удалось узнать про задачу, где нужно было отсортировать список без свопа, remove?
0
Ivan Zelenkov
3 мая 2021, 13:01
Нет, к сожалению не получилось
0
Ivan Zelenkov
3 мая 2021, 14:08
Flexo, это максимум что я сделал к тому заданию. Там не хватает методов для сортировки по заданию и swap неверный
0
Ivan Zelenkov
3 мая 2021, 14:56
Flexo, я поэкспериментировал и добавил в метод сортировки новый List. По другому никак. Все получилось.
0
Flexo Bending Unit #3370318
3 мая 2021, 15:00
тогда лучше так записать
но я бы в стаком случае назвал метод getSortedStudentList
а void метод, если называется studentSort, должен изменять (сортировать) тот исходный список, который передаётся в аргумент... но мы это уже обсуждали 0
Ivan Zelenkov
3 мая 2021, 15:07
Понял, спасибо.
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 09:14
Реализация - это то, что синим шрифтом?
Что именно неверно?
0
Ivan Zelenkov
3 мая 2021, 13:02
В условии говорят, чтобы первый параметр был T, а второй CSCIStudent. Я поставил для обоих CSCIStudent, потому что выбивало ошибку
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 13:42
Что это за условия такие? можно посмотреть?
У тебя Comparator<CSCIStudent> - то есть T это и есть CSCIStudent
0
Ivan Zelenkov
3 мая 2021, 13:49
Я скорее всего не так понял условие. Там говорится:
А потом, говорят что они планируют дать тип второму параметру CSCI. Я понял что мы должны записывать это так:
Но я считаю, что это неправильно ведь мы используем Comparator для CSCIStudent типа, то есть все типы параметров тоже такие:
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 14:10
@o2 это явная опечатка, никакого смысла в этой записи нет.
Ну и в конце концов всегда можно посмотреть код интерфейса Comparator.
T - это тип, которым ты параметризуешь свой класс. Поскольку ты параметризуешь его типом CSCIStudent, то он и выступает в качестве T.
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 14:17
И фразу про второй параметр ты понял не так - имеется в виду, что сам компаратор будет вторым параметром в методе sort.
+1
Ivan Zelenkov
3 мая 2021, 14:22
Ага, понял. Спасибо за заметку. То есть должно быть что-то такое? Но тогда у меня к примеру метод getAge() не примется у объекта p2
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 14:28
Компаратор будет 2м параметром в методе сортировки. А не в методе compare самого компаратора.
(Посмотри, например, в классе Collections есть два метода sort - один принимает только саму коллекцию, которую надо отсортировать, а другой - коллекцию и компаратор).
Метод compare должен быть в классе, реализующем интерфейс Comparator, а не в том классе, объекты которого ты сравниваешь.
+1
Ivan Zelenkov
3 мая 2021, 14:57
Аааа, ясно. Буду думать. Спасибо. Не так в переводе понял
0
Flexo Bending Unit #3370318
3 мая 2021, 15:05
что это за курсы, можно поинтересоваться?
0
Ivan Zelenkov
3 мая 2021, 15:08
Универ в сша)))
0
Ivan Zelenkov
3 мая 2021, 15:16
Ксения, а смысл второго параметра comparator, если мы можем реализовать интерфейс Comparator и его метод compare вот так:
И в итоге спользовать его в нашем сортировочном методе. Не так ли?
0
Flexo Bending Unit #3370318
3 мая 2021, 15:17
крут 😎
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 15:26
Перечитай еще раз начало того текста, который ты выложил в вопросе, там как раз говорится о том, что можно обеспечить возможность сортировки двумя способами - 1) реализовав в твоем классе интерфейс Comparable или 2) реализовав в отдельном классе интерфейс Comparator.
Например, предствь, что у тебя в коллекции находятся объекты класса из какой-нибудь другой библиотеки, и этот класс не имплементит Comparable. Изменить ты его не можешь, а сравнить объекты тебе тем не менее надо.
Или же класс реализует Comparable, но тебе требуется делать сравнение по иным критериям.
(К примеру, у тебя список строк, и ты его хочешь отсортировать не лексикографически, а по длине строки).
Что делать в этой ситуации?
Просто создаешь компаратор и передаешь его в метод сортировки.
Вот ты написал выше реализацию метода compare. А где этот метод должен находиться? В компараторе. А как твой метод сортировки о нем узнает? Для этого надо передать компаратор в метод сортировки.
Ну или же ты можешь реализовать в своем классе интерфейс Comparable с его методом
int compareTo(T o)
Но это уже другой случай, не из этого задания.
+2
Ivan Zelenkov
3 мая 2021, 15:36
Спасибо большое, буду работать над этим
0
Ivan Zelenkov
3 мая 2021, 15:51
Вот что я сделал:
Здесь добавление только не очень корректно происходит
0
Ksenia Volkova Java Developer в DXC Master
3 мая 2021, 16:01
Ну подумай сам... у тебя вложенные циклы - то есть твой if/else будет отрабатывать n * (n-1) раз (где n - это размер твоего списка). Каждый раз при этом в список csciStudentMyList будет добавляться по два элемента.
То есть в получившемся списке будет 2*n*(n-1) элементов.
Ну и в целом - ты уверен, что сортировка должна заключаться в том, чтобы создать новую коллекцию и вывести на экран ее элементы?
Я, конечно, не знаю, что у тебя там в условии задания, но вообще под сортировкой обычно имеется в виду не это.
+2
Ivan Zelenkov
3 мая 2021, 16:22
Короче, препод запутал. Буду переспрашивать что и как там. Спасибо большое!
0