2010-01-12 4 views
2

J'ai créé une classe DateTime (qui enveloppe GregorianCalendar). J'ai également créé un événement de classe. Je voudrais créer une collection d'événements à partir de laquelle je peux récupérer un événement par sa date. Par exemple: événement est de type Evénement; date1 et date2 sont de type DateTime et aussi date1.equals (date2); 'events' est ma collection d'événements.Comment définir une classe de ma création comme une clé dans une TreeMap (Java)

event.put(date1, event) 

ajoutera « événement » à la collecte afin que je puisse le récupérer par

event.get(date2) 

Je pense à l'aide d'un TreeMap pour mettre en œuvre cette collection d'événements parce que je pourrais avoir besoin d'imprimer tous les événements triés par date.

Alors, comment définir DateTime pour être une clé d'un TreeMap? Que dois-je ajouter à DateTime? et quoi faire d'autre? Merci.

Répondre

9

Vous avez juste besoin d'avoir la DateTime mettre en œuvre Comparable<DateTime>, quelque chose le long des lignes de:

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; 
    } 
} 

Le Comparable interface est documenté here.

5

Il y a deux façons:

  1. Marque DateTime implémentent Comparable < DateTime>. Définissez la méthode compareTo().

  2. Définir une classe (peut-être anonyme) qui implémente Comparator < DateTime>. Définissez sa méthode compare() comme requis. Passez une instance de cette classe dans le constructeur de votre TreeMap.

Questions connexes