Соображения, если вы заинтересованы в управлении записями календаря :
- Возможны бесконечные даты - не тратьте память на неиспользованные дни
- Учитывая дату, вы хотите быстро получить доступ к ее дню - использовать массив или поиск на основе хеша
- Каждый день имеет уникальную дату - дата карты => день
МОДЕЛЬ
// best to use ENUM for fixed set of constants
enum Month {
JANUARY, FEBRUARY, ... , NOVEMBER, DECEMBER
}
enum Weekday {
SUNDAY, MONDAY, ... , FRIDAY, SATURDAY
}
/**
* The day "data node". Fill in constructors/accessors.
*/
class Day {
int year;
Month month;
Weekday weekday;
String date; // hashkey
String entry; // the entry
}
/**
* The calendar, simply mapping a unique date to it's day.
* Create a date like: year + "-" + MONTH + "-" + DAY
*/
HashMap<String, Day> calendar;
ВИД
Поскольку наша структура данных не является разреженной, независимое представление должно имитировать полный календарь. Показать все дни / сгенерировать все даты в соответствии с правилами календарей, но добавьте день к HashMap
только в случае сохранения новой записи.
ПРИМЕЧАНИЯ
- Довольно эффективно в пространстве и времени.
- Выше упрощено: оберните
HashMap
в класс для арбитража CRUD операций над days
.
- Предполагается, что вам не нужно манипулировать месяцами / годами, а только днями. Если это не так, и вы хотели бы, например, получите все дни в
month
или удалите year
, подумайте о том, чтобы иметь трехуровневую карту, например year => month => day
рядом с ней.