import static java.lang.System.*;  // cf. Java 5
import java.io.*;
import java.util.*;
/**
  * Classe 'tab_hachage_triee' :  Test de qq. méthodes du conteneur 'TreeMap'
  * @author   (c) ~/2A env.
  * @version  1.15  2006.08.24
  * @since    1.0   2005.10.01
  */
class tab_hachage_triee   { 

   private  TreeMap<String, ArrayList<String>>  hash;   // Java 5
   public tab_hachage_triee()  { 
	hash= new TreeMap<String, ArrayList<String>>(); }
 
   public void insere(String author, String novel)   { 
      ArrayList<String> ouvrages = hash.get(author);
      if    (ouvrages == null)    { 
     // l'auteur 'author' est nouveau ici <==> il n'est pas enregistré encore !
        ArrayList<String> v = new ArrayList<String>();
        hash.put(author, v);
        v.add(novel); 
      }
      else  { // le nom de l'auteur est déjà enregistré dans la table !
         ArrayList<String> titres = ouvrages;
         if ( !titres.contains(novel))  titres.add(novel);
         // on ajoute le nouveau roman 'novel' parmi les titres anciens
      }
   }
   public void affich() { 
      Iterator it = hash.keySet().iterator();
      while(it.hasNext())  { 
          String str = (String) it.next();
          out.println(str+" : ");
          ArrayList<String> titres = (ArrayList<String>) hash.get(str);
          for (int i=0; i<titres.size(); ++i)  { 
              String s = (String) titres.get(i);
              out.println("                       "+s); 
          }
       }
    }
}
  
/**
  * Classe 'tab_hatr' :  pour tester la classe 'tab_hachage_triee'
  * @author   (c) ~/2A env.
  * @version  1.15  2006.08.24
  * @since    1.0   2005.10.01
  * @see      tab_hachage_triee
  */
public class tab_hatr    {
    public static void main (String [] arg)  {  
       out.println("\ntab_hatr: Un exemple d'emploi de TreeMap (Java 5) pour trier la");
       out.println("table via un ABO des clés (c)~/2a env. 2006.10.10 09h35\n");
       tab_hachage_triee th = new tab_hachage_triee();
       th.insere("Zola","La B\u00eate humaine");  
       th.insere("Zola","Germinal");         // insertions 
       th.insere("Hugo","Les Mis\u00e9rables");   // dans le désordre ...
       th.insere("Duras","L'Amant");
       th.insere("Steinbeck","Les Raisins de la col\u00e8re");
       th.insere("Duras","Un barrage contre le Pacifique");  
       th.affich();  
    // On doit obtenir la liste par ordre alpha. des auteurs
    // mais les titres des ouvrages restent non triés
       es.attente();
    }
}
