/** * Ce programme sert à montrer l'utilisation de Hashtable * Vous devez compléter les parties manquantes, signalées * par <À COMPLÉTER> * @author Philippe Langlais (le codage de l'exemple) * @author Mohamed Lokbani (exo en lui même) * @version 1.1 */ import java.util.*; // ------------------------------------------------------- // une classe de travail // ------------------------------------------------------- class Personne { private int age; private String nom, prenom; /* <À COMPLÉTER> il existe un algorithme par défaut pour associer à chaque objet (ici Personne) une clé de hashage. pour ce qui suit, vous allez définir un nouveau algorithme pour calculer la clé de hashage de "Personne" comme suit: 11 x le code de hashage du nom de la personne + 13 x le code de hashage du prénom de la personne + age de la personne écrire donc la méthode hashCode de personne qui repose sur le précédent algorithme. */ /* <À COMPLÉTER> dès que la méthode hashCode a été redéfinie, il faudra redéfinir la méthode equals ... la méthode equals est définie au sens mathématique i.e. si Objetc1 = Object2 (ce dernier est passé en argument) elle retourne true sinon false. écrire la méthode equals pour la classe Personne. */ public Personne(String prenom, String nom, int age) { this.nom = nom; this.prenom = prenom; this.age = age; } public String toString() {return prenom + " " + nom + " age: " + age;} } // ------------------------------------------------------- // voici la classe principale // ------------------------------------------------------- public class HashTableTest { static String epicerie [] = { "abricot","banane","carotte","date","fenouille", "grenade","haricot","jujube","lentilles","myrtilles", "olive","poire","pomme","reglisse","tilleul" }; public static void main( String args [] ) { Hashtable ht = new Hashtable (); String old; Object objetRef; /* <À COMPLÉTER> ajouter les éléments de épicerie dans une table de hashage ht comme suit: clé: le produit ex. abricot valeur: un entier 0 à taille de épicerie ex. abricot 0 banane 1 ; tilleul 14 */ /* pour la définition de la méthode "afficheHashTable" voir la fin de ce fichier */ afficheHashTable(ht); /* <À COMPLÉTER> ajouter l'élément suivant à ht: clé: abricot ; valeur: 50 prend la place des xxxxxxxxxxxxxxxxxx */ if ( (objetRef = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) != null ) System.out.println("abricot existait deja dans la table au prix de " + objetRef ); afficheHashTable(ht); /* <À COMPLÉTER> acceder à l'élément: banane prend la place des xxxxxxxxxxxxxxxxxx */ objetRef = xxxxxxxxxxxxxxx; if (objetRef == null) System.out.println("banane n'est pas dans la table"); else System.out.println("banane " + objetRef); /* <À COMPLÉTER> retirer l'élément: carotte prend la place des xxxxxxxxxxxxxxxxxx */ if ( (objetRef = xxxxxxxxxxxxxxxxx) == null) System.out.println("carotte n'est pas dans la table"); else System.out.println("retrait de carotte " + objetRef); /* <À COMPLÉTER> afficher la taille de ht. prend la place des xxxxxxxxxxxxxxxxxx */ System.out.println("taille = " + xxxxxxxxxxxxxxx); /* <À COMPLÉTER> afficher la clé et le code de hashage prennent la place des xxxxxxxxxxxx */ // le secret du hashage for (int i=0; i Que signifie l'instruction suivante ... */ Hashtable hash = new Hashtable(151); /* <À COMPLÉTER> instancier les objets suivantes du type Personne: elianne1 : prénom: elianne nom: tremblay age:32 elianne2 : prénom: elianne nom: tremblay age:32 brigitte prénom: brigitte nom: simard age:33 */ /* <À COMPLÉTER> ajouter elianne1, elianne2 et brigitte dans la table de hashage avec les valeurs suivantes: elianne1 : valeur: 23.5 elianne2 : valeur: 40.5 brigitte valeur: 10.0 */ /* <À COMPLÉTER> afficher la taille de hash. prend la place des xxxxxxxxxxxxxxxxxx */ System.out.println("taille " + xxxxxxxxxxxxxxx); } // ------------------------------------------------------- // notez a l'execution l'ordre des elements // ------------------------------------------------------- static void afficheHashTable(Hashtable h) { /* <À COMPLÉTER> vous devez les informations relatives à une table donnée: Dump: [clé,valeur][clé,valeur][clé,valeur] ... [clé,valeur](taille_de_h elements) Pour le faire, vous devez utiliser les "outils" de la classe "Enumeration". */ } } /* lokbani>inclure jdk lokbani>javac HashTableTest.java lokbani>java HashTableTest Dump: [poire,11] [carotte,2] [tilleul,14] [abricot,0] [date,3] [banane,1] [grenade,5] [olive,10] [jujube,7] [reglisse,13] [pomme,12] [fenouille,4] [haricot,6] [myrtilles,9] [lentilles,8] (15 elements) abricot existait deja dans la table au prix de 0 Dump: [poire,11] [carotte,2] [tilleul,14] [abricot,50] [date,3] [banane,1] [grenade,5] [olive,10] [jujube,7] [reglisse,13] [pomme,12] [fenouille,4] [haricot,6] [myrtilles,9] [lentilles,8] (15 elements) banane 1 retrait de carotte 2 taille = 14 abricot -1192291216 banane -1396355223 carotte 554282218 date 3076014 fenouille -1911263983 grenade 283970894 haricot 696638104 jujube -1148951911 lentilles 261063800 myrtilles -1794874903 olive 105832923 poire 106845693 pomme 106849382 reglisse -687741100 tilleul -1314636057 taille 3 */