Как установить класс моего создания, чтобы быть ключом в TreeMap (Java) - PullRequest
2 голосов
/ 12 января 2010

Я создал класс DateTime (который обёртывает GregorianCalendar). Я также создал класс Event. Я хотел бы создать коллекцию событий, из которых я могу получить событие по дате. Например: событие имеет тип Event; date1 и date2 имеют тип DateTime, а также date1.equals (date2); 'events' - это моя коллекция событий.

event.put(date1, event)

добавит 'событие' в коллекцию, чтобы я мог получить его по

event.get(date2)

Я думаю об использовании TreeMap для реализации этой коллекции событий, поскольку мне может потребоваться распечатать все события, отсортированные по дате.

Так как же установить DateTime в качестве ключа TreeMap? Что я должен добавить в DateTime? а что еще делать? Спасибо.

Ответы [ 2 ]

9 голосов
/ 12 января 2010

Вам просто нужно иметь DateTime орудие Comparable<DateTime>, что-то вроде:

class DateTime implements Comparable<DateTime> {
  GregorianCalendar calendar;

  ...

  public int compareTo(DateTime other) {
    if (calendar.equals(other.calendar))
      return 0;
    else if (calendar.before(other.calendar))
      return -1;
    else
      return 1;
  }
}

Сопоставимый интерфейс задокументирован здесь .

5 голосов
/ 12 января 2010

Есть два способа:

  1. Сделать DateTime внедренным Сопоставимым . Определите метод compareTo ().

  2. Определить класс (может быть анонимным), который реализует Компаратор . Определите его метод compare () как требуется. Передайте экземпляр этого класса в конструктор вашего TreeMap.

...