методом Collections.addAll(students,
new Student("Иванов", 22),
new Student("Петров", 18),
new Student("Сидоров", 19) мы добавляем 3 name и age в коллекцию students, верно?
далее в классе AgeComparator мы имплементируем эту коллекцию и дальше я запутался)))
Что означает student1 и student 2 ? откуда берет данные student1.getAge() ?
Anonymous #2632922
35 уровень
можете объяснить
Решен
Комментарии (15)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
12 марта 2022, 08:08
В коллекцию students ты добавляешь объекты класса Student. Как ты можешь в коллекцию студентов добавлять строки и числа? Ты сначала из каждой пары строка-число создаёшь объект Student при помощи конструктора, и его уже добавляешь в коллекцию.
В классе AgeComparator ты имплементируешь не коллекцию, а компаратор этой коллекции.
Компаратор коллекции некоторых объектов сравнивает между собой два экземпляра этих объектов, и говорит в каком случае один "больше" другого, в каком "меньше", и в каком "равен". То есть компаратор коллекции студентов сравнивает между собой двух студентов. Внутри компаратора это не какие-то конкретные студенты, а реализация этого сравнения. Она говорит: вот возьми одного студента, возьми другого, сравни их возраст - и получишь ответ, какой из студентов "больше". Каких студентов ты возьмёшь - не важно. У кого из студентов вызовешь этот метод, того и будешь сравнивать.
Метод getAge() описан в классе Student. Он возвращает значение поля age у экземпляра класса.
+1
Anonymous #2632922
12 марта 2022, 08:22
то есть ArrayList<Student> students = {student1, student2, student3}; верно?
а цифры после student она автоматически сама добавляет?
0
hidden #598481
12 марта 2022, 08:52
Нет, не верно. Откуда возьмутся эти student1, 2, 3?
Вообще лист - это список, а в фигурных скобках массив. Но дело не в этом.
Твой компаратор понятия не имеет ни о каком списке и ни о каких конкретных студентах. Компаратор - это объект, у которого есть одна функция - сравнить между собой два объекта. Компаратор студентов сравнивает студентов. Двух, абстрактных, любых. Не конкретных, а просто умеет сравнить пару студентов между собой. В этой паре (любой, которую ты возьмёшь) первый объект будет student1, а второй будет student2. И результатом будет число, положительное если первый больше, отрицательное если второй, или ноль, если равны.
На этом функции компаратора заканчиваются, больше он ничего не умеет.
А у коллекций есть функция сортировки, используя компараторы. Достаточно передать компаратор в метод sort, и коллекция будет отсортирована по принципам сравнения этого компаратора. И при помощи именно вот этой вот функции твой список затем и сортируется.
0
Anonymous #2632922
12 марта 2022, 10:48
запутался. Что содержит коллекция?
0
hidden #598481
12 марта 2022, 12:14
Объекты.
Коллекция - более общий термин для списка, лист - один из видов коллекций, частный случай коллекции.
Твоя коллекция - это список студентов. Он содержит объекты класса Student.
0
Anonymous #2632922
12 марта 2022, 12:53
пожалуйста можете по подробнее
1 ссылка students лист -> 2 ссылка на первый объект касса Student -> 3 ?
0
hidden #598481
12 марта 2022, 13:17
Я ничего не понял, что ты написал.
Такой код тебе понятен? Вот ты создал список, вот создал одного за другим три объекта класса Student, каждый из которых добавил в этот список.
Эти две строчки делают то же самое другим способом.
В обоих случаях у тебя на выходе получается список с тремя элементами.
Это понятно?
0
Anonymous #2632922
12 марта 2022, 13:42
да это я понял. я не понял как name и age хранятся в памяти, точнее в списке students, чтобы потом вытащить с помощью student1.getAge()
+1
hidden #598481
12 марта 2022, 13:49
В другом классе описан класс компаратора. Компаратор по-русски значит "сравниватель", штука которая сравнивает.
Он понятия не имеет ни о каком списке студентов, не знает ни про Иванова, ни про Петрова.
Он знает только о том, что является публичным в классе Student, то есть что у любого студента можно узнать имя и возраст методами getName() и getAge(). И основываясь на этом в нём и реализован метод compare.
У класса Collections есть метод sort(), который может принять в аргументах объект любого класса, являющегося компаратором, т.е. любого класса, который реализует интерфейс Comparator. Это позволяет отсортировать коллекцию объектов, в порядке, предусмотренном результатами сравнения компаратора.
+1
hidden #598481
12 марта 2022, 13:52решение
ну так и хранятся. у каждого студента есть поля private String name, которое содержит его имя, и private int age, которое содержит возраст. Геттеры возвращают значения этих полей при обращению к объектам.
Это же всё разбиралось уровне на шестом, когда были задачки про котиков, ещё до начала всяких списков.
+2
Anonymous #2632922
12 марта 2022, 16:22
тогда метод public Student(String name, int age) {..} тут является сеттером и было бы правильно если метод назвали бы setStudent,верно?
0
Anonymous #2632922
12 марта 2022, 16:27
а метод под именем Student должен быть конструктор, верно?
0
KIRAРазработчик в prosv.ruExpert
12 марта 2022, 16:46
public Student(String name, int age) {..} это конструктор
сеттеры и геттеры существуют для полей
поля у класса это
String name
int age
для них сеттеры и геттеры назывались бы
setName
getName
setAge
getAge
0
hidden #598481
12 марта 2022, 20:06
Это не сеттер, а конструктор. У конструктора нет имени, только тип создаваемого объекта
0
МАРИЯ
9 апреля 2022, 09:00
Не совсем верно.
У конструктора есть имя и оно совпадает с именем Класса.
0