HashSet и TreeSet - две наиболее распространенные реализации интерфейса Set в Java Collections Framework. Первая основана на использовании функции hashCode и структуры данных “хеш-таблица”, вторая - на основе сравнения элементов и структуры данных “бинарное дерево” (точнее красно-черное дерево). Знание и понимание отличий этих структур данных необходимо для любого программиста. К сожалению, многие лишь поверхностно рассматривают их, что приводит к созданию неэффективного кода, а иногда и к багам. Познакомиться с этими и другими классами коллекций Java можно, посмотрев урок 10 из курса Java для тестировщиков. Для детального изучения необходимо читать дополнительную литературу. В данном видео Вы познакомитесь с некоторыми особенностями этих классов, незнание которых может привести к возникновению ошибок или изобретению новых “велосипедов”.
Я думаю, что некоторым из Вас это видео может показаться неинтересным, не открывшим ничего нового. Это хорошо, что Вы знаете эти темы - подождите следующих видео :) А я буду рад за тех, кто почерпнет что-то полезное из этого материала. Потому что на самом деле, реальные баги в реальных проектах, которые мне пришлось отлавливать, возникли как раз из-за невнимательности (или незнания) при работе с этими реализациями Set.
Так как многие из Вас хотят домашнего задания, чтобы потренировать навыки программирования, то вот одно, среднего уровня сложности:
Написать программу, которая выводит 3 блока информации:
Список праздников прочитать при старте программы из этого файла: holidays.txt.zip
- список праздников на сегодняшний день
- список праздников на завтрашний день
- список праздников на ближайшие 5 дней, не включая сегодняшний и завтрашний дни
Каждую строку в этом файле преобразовать в объект класса Holiday, который implements Comparable<Date>, и который будет иметь два поля: Date date и String name.
Для хранения объектов Holiday в памяти использовать TreeSet.
Результат работы программы должен быть приблизительно таким:
#>java package.name.ShowHoliday
Сегодня:
Праздник 1
Праздник 2
Завтра:
Праздник 3
Праздник 4
Скоро:
Ср, 17 июля - Праздник 5
- Праздник 6
Чт, 18 июля - Праздник 7
- Праздник 8
Реализовать в программе возможность передать заданный день и количество дней в командной строке. В этом случае вывести все праздники на этот день и на следующее количество дней, оформив вывод так, как сделано в блоке “Скоро” при обычном запуске программы.
P.S. Если вдруг кому интересно, то для формирования файла с праздниками я написал shell-скрипт на bash, который посылает запросы на сайт и парсит праздники с результирующей страницы. Вы можете скачать скрипт и поиграться с ним (нужен Linux): holiday_parse.sh
Ну и, собственно, видео:
No comments:
Post a Comment