Trouver un élément proche parmi plusieurs éléments

sherlock-holmes Nous allons poser un problème simple de la vie de tous les jours pour expliquer ce problème technique. Prenez votre horaire de métro et  trouvez le métro qui part avant 8H30 et celui qui part après 16H30.

Pour faire cela en Java, nous allons utiliser une Collection de type Tree (TreeMap ou TreeSet). Nous verrons deux façons de résoudre ce problème, selon que l’on utilise Java 5 ou bien Java 6.

Établir nos horaires dans une structure de données

/**
 * On represente nos horaires sous la forme d'un arbre contenant des les
 * horaires. Les horaires sont représentés sous la forme d'entiers.
 * 16H00 sera représenté par 1600.
 */
TreeSet horaires = new TreeSet();
horaires.add(800);  //8H00
horaires.add(820);  //8H20
horaires.add(1020); //10H20
horaires.add(1100); //11H00
horaires.add(1410); //14H10
horaires.add(1525); //15H20
horaires.add(1635); //16H35
horaires.add(1705); //17H05
horaires.add(1800); //18H00

Trouver nos horaires en Java 5

En Java 5, il faut ruser!

/* Horaires avant 8H30 en Java 5 */
TreeSet subSetHoraires8H30 = (TreeSet) horaires.headSet(830);
Integer horaireAvant8h30 = subSetHoraires8H30.last();
 
/* Horaires aprés 16H30 en Java 5 */
TreeSet subSetHorairesApres16h30  = (TreeSet) horaires.headSet(1630);
Integer horaireApres16h30 = subSetHorairesApres16h30 .first();

Trouver nos horaires en Java 6

En Java 6, c’est beaucoup plus simple!

/* Horaires avant 8H30 en Java 6 */
Integer horaireAvant8h30 = horaires.lower(830);
 
/* Horaires aprés 16H30 en Java 6 */
Integer horaireApres16h30 = horaires .higher(1630);

Complément: Approfondir ses Connaissances sur les Collections