JavaRush /Курсы /Java Collections /Большая задача: Java коллекции

Большая задача: Java коллекции

Java Collections
4 уровень , 15 лекция
Открыта

— Привет, боец!

— Поздравляю тебя с повышением уровня квалификации. Нам нужны отчаянные парни.

— Уверен, у тебя есть еще много нерешенных задач. Самое время решить парочку из них!

8
Задача
Java Collections, 4 уровень, 15 лекция
Недоступна
AmigoSet (1)
Давай напишем какую-нибудь коллекцию. Пусть это будет твой собственный Set. Пусть этот класс позволяет вставку NULL. 1. Создай класс AmigoSet. Пусть этот класс наследуется от AbstractSet. Этот сэт должен поддерживать интерфейсы Serializable и Cloneable (как же без этого??). Также очевидно, что он д
30
Задача
Java Collections, 4 уровень, 15 лекция
Недоступна
AmigoSet (2)
Изобретать механизм работы с хешем не будем, он уже реализован во многих коллекциях. Мы возьмем коллекцию HashMap и воспользуемся ей. 1. Создай приватную константу Object PRESENT, которую инициализируй объектом Object, это будет наша заглушка. 2. Создай private transient поле HashMap<E,Object> map
14
Задача
Java Collections, 4 уровень, 15 лекция
Недоступна
AmigoSet (3)
Напиши свою реализацию следующих методов при условии, что нужно работать с ключами мапы: * Iterator<E> iterator() - очевидно, что это итератор ключей. Получи множество ключей в map, верни его итератор * int size() - это количество ключей в map, равно количеству элементов в map * boolean isEmpty() *
14
Задача
Java Collections, 4 уровень, 15 лекция
Недоступна
AmigoSet (4)
Твое собственное множество AmigoSet реализует интерфейс Cloneable. Однако, не клонируется правильно. Напиши свою реализацию метода Object clone(), сделай поверхностное клонирование. * Клонируй множество, клонируй map. * В случае возникновения исключений выбрось InternalError. * Убери лишнее пробрас
30
Задача
Java Collections, 4 уровень, 15 лекция
Недоступна
AmigoSet (5)
Твое собственное множество AmigoSet реализует интерфейс Serializable. Однако, не сериализуется правильно. 1. Реализуй свою логику сериализации и десериализации. Вспоминай, какие именно приватные методы нужно добавить, чтоб сериализация пошла по твоему сценарию. Для сериализации: * сериализуй сет *
8
Задача
Java Collections, 4 уровень, 15 лекция
Недоступна
AmigoSet (6)
Открой исходники HashSet (если у тебя нет исходников джавы, то скачай их и подключи), сравни со своим кодом. Быстро это можно сделать сравнив через буфер. Скопируй код класса HashSet в буфер. Зайди в класс AmigoSet, далее правая кнопка мыши -> Compare with Clipboard. Ты только что реализовал сет, а
Комментарии (87)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
{Java_Shark} Уровень 36
9 апреля 2025
++
Denis Odesskiy Уровень 46
9 ноября 2024
Жаль что рефлексию в Java давно пустили под нож😰. Была такая гибкая штука, для метапрограммирования, теперь увы и ах. Зато у конкурентов, в тех же C# да и в пайтоне с этим проблем нет...
Anemon Уровень 51 Expert
5 марта 2025
А с чего ты это вообще взял то?.. Один из популярнейших и важнейших фреймворков - легендарный Spring, невероятно широко использует рефлексию, ты о чем вообще? Откуда такие мысли? о-о
Denis Odesskiy Уровень 46
5 марта 2025
Я это взял из многократных заявлений Oracle а также из доков и из практики, новых (и не очень уже новых, начиная с Java 9) версий Java, рефлексию сильно ограничивают как минимум, уже в последних версиях пользоваться ей так вольготно как раньше не получится. Для комфортного перехода разработчиков и особенно библиотек, делается это плавно, сначала были предупреждения, их можно было отключить, потом и это убрали (возможность отключить). Главная цель как заявляет Oracle увеличить безопасность языка и следование его канонам ООП, т.к. по их мнению рефлексия нарушает главный принцип ООП, а именно инкапсуляцию. Попробуй рефлексией получить доступ в последних версиях Java к приватным и защищенным членам классов из других модулей например. Помнишь была задачка где мы писали свою мапу на основе HashMap, там мы получали доступ к приватным полям через рефлексию. В новых версиях это не сработает. Другое дело что многое можно сделать и без рефлексии и даже прозрачнее, читабельнее и производительнее будет. Пару ссылок на стаковерфлов: https://stackoverflow.com/questions/74723932/java-17-reflection-issue?form=MG0AV3 и https://stackoverflow.com/questions/69177973/how-can-i-make-reflection-work-on-jdk-16-and-later?form=MG0AV3. Тема обширная и разрозненная, лень шерстить всё. Если интересно поищи еще инфу сам, а лучше попробуй😉. П/С. По Spring у тебя возможно немного устаревшая информация. Они конечно опираются на рефлексию для инжекций зависимостей и не только (опирались), но для минимизации зависимости от рефлексии (в том числе) они используют также CGLIB, ASM, AOP, Compile-time processing...
Denis Odesskiy Уровень 46
5 марта 2025
Уже раз коснулись безопасности. По той же причине (безопасность) начиная с Java 9 потихоньку ограничивают доступ к нативному коду😏, из-за этого и и-за ограничений рефлексии (пока надеюсь в несбыточной перспективе) могут пострадать горячо любимые мной библиотеки JNI и JNA 🙄. Ладно, это всё нытьё, я верю что архитекторы Java идут по верному пути, и сделают всё как надо, если заберут одно, то дадут нам в замену еще более лучший инструмент (наивно улыбаясь...)
Anemon Уровень 51 Expert
7 марта 2025
Хорошо, поверю в твои доводы. Моя не особо тщательная проверка и поиск информации показали что всё работает, в том числе на 17 джаве, и я никогда не видел инфу об ограничении рефлексии, плюс знал что на ней работает Спринг и многие библиотеки. Но буду надеяться на то же что и ты, пускай джава развивается и становится лучше. Чем она будет надёжнее и безопаснее, тем будет надёжнее наша работа с крупными компаниями, которым как раз это и нужно для огромных серверных приложений.
Codemilex Уровень 51
8 ноября 2024
HashMapReflectionHelper в задаче 5 - не ясно откуда взять.
Denis Odesskiy Уровень 46
7 ноября 2024
Я всё понял! Разработчики котлина видимо учились тут, начали с собственной реализации коллекций в этой задачи, а потом так понравилось, что не смогли остановиться...😅
SomeBody098 Уровень 51
13 октября 2024
ну ОК
Андрей Уровень 51
30 апреля 2024
я так понимаю в конце будем писать свой компилятор джавы и сравнивать с существующим
8 декабря 2023
Блин, у меня пропустило решение с ошибкой в одной из первых задач и я промучилась кучу времени на предпоследней, не принимало верное решение 🐸
Антон Уровень 50
3 ноября 2023
Задача на редкость хороша.
PhanSca Уровень 48
17 мая 2023
Отличная задача - побольше бы таких.
StrangeAngel Уровень 46
25 апреля 2023
Интересная тема, заодно сериализацию вспомнил.