Atelier 5.2: implanter un mappage par hachage #
Recopier des classes à partir de l’atelier5_1
#
-
Recopier les classes suivantes:
MapNaifTesteurDeMapAbstraitTesteurDeMapNaif
Créer la classe ChaineHasha (une mauvaise fonction de hachage)
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
ChaineHasha
- Nom de la classe:
-
Débuter l’implantation comme suit:
public class ChaineHasha extends CleHachable<String> {
public ChaineHasha(String valeurJava) {
super(valeurJava);
}
@Override
public int indice() {
// TODO: une mauvaise fonction de hachage
}
}
Créer la classe ChaineHashb (une fonction de hachage moyenne)
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
ChaineHashb
- Nom de la classe:
-
Débuter l’implantation comme suit:
public class ChaineHashb extends CleHachable<String> {
public ChaineHashb(String valeurJava) {
super(valeurJava);
}
@Override
public int indice() {
// TODO: une fonction de hachage "moyenne"
}
}
Créer la classe ChaineHashc (une bonne fonction de hachage)
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
ChaineHashc
- Nom de la classe:
-
Débuter l’implantation comme suit:
public class ChaineHashc extends CleHachable<String> {
public ChaineHashc(String valeurJava) {
super(valeurJava);
}
@Override
public int indice() {
// TODO: un bonne fonction de hachage
}
}
Créer la classe MapHash
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
MapHash
- Nom de la classe:
-
Débuter l’implantation comme suit:
public class MapHash <C extends CleHachable<?>, V extends Object> extends MapJava<C,V> {
private static final int TAILLE_TABLE_HACHAGE = 20;
private MapNaif<C,V>[] table = new MapNaif[TAILLE_TABLE_HACHAGE];
private int taille = 0;
public MapNaif<C, V>[] getTable() {
return table;
}
public void setTable(MapNaif<C, V>[] table) {
this.table = table;
}
public int getTaille() {
return taille;
}
public void setTaille(int taille) {
this.taille = taille;
}
private int indiceTable(C c) {
int indiceBrut = c.indice();
return indiceBrut % TAILLE_TABLE_HACHAGE;
}
@Override
public void put(C c, V v) {
// TODO
}
@Override
public V get(C c) {
// TODO
}
@Override
public void clear() {
// TODO
}
@Override
public int size() {
// TODO
}
@Override
public boolean isEmpty() {
// TODO
}
@Override
public boolean containsKey(C c) {
// TODO
}
@Override
public boolean containsValue(V v) {
// TODO
}
@Override
public void remove(C c) {
// TODO
}
@Override
public List<C> keys() {
// TODO
}
}
Créer la classe TesteurDeMapHasha
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
TesteurDeMapHasha
- Nom de la classe:
-
Implanter comme suit:
public class TesteurDeMapHasha extends TesteurDeMapAbstrait {
@Override
public MapJava<Cle<String>, Integer> nouveauMap() {
return new MapHash();
}
@Override
public CleHachable<String> nouvelleCle(String valeur) {
return new ChaineHasha(valeur);
}
}
Créer la classe TesteurDeMapHashb
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
TesteurDeMapHashb
- Nom de la classe:
-
Implanter comme suit:
public class TesteurDeMapHashb extends TesteurDeMapAbstrait {
@Override
public MapJava<Cle<String>, Integer> nouveauMap() {
return new MapHash();
}
@Override
public CleHachable<String> nouvelleCle(String valeur) {
return new ChaineHashb(valeur);
}
}
Créer la classe TesteurDeMapHashc
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
TesteurDeMapHashc
- Nom de la classe:
-
Implanter comme suit:
public class TesteurDeMapHashc extends TesteurDeMapAbstrait {
@Override
public MapJava<Cle<String>, Integer> nouveauMap() {
return new MapHash();
}
@Override
public CleHachable<String> nouvelleCle(String valeur) {
return new ChaineHashc(valeur);
}
}
Créer la classe MonAtelier5_2
#
-
Ajouter la classe suivante au paquet
atelier5_2- Nom de la classe:
MonAtelier5_2
- Nom de la classe:
-
Implanter comme suit:
public class MonAtelier5_2 extends Atelier5_2 {
public static void main(String[] args) {
(new MonAtelier5_2()).valider();
}
@Override
public TesteurDeMap fournirTesteurDeMapNaif() {
return new TesteurDeMapNaif();
}
@Override
public TesteurDeMap fournirTesteurDeMapHasha() {
return new TesteurDeMapHasha();
}
@Override
public TesteurDeMap fournirTesteurDeMapHashb() {
return new TesteurDeMapHashb();
}
@Override
public TesteurDeMap fournirTesteurDeMapHashc() {
return new TesteurDeMapHashc();
}
}
Compléter les implantations #
- Utiliser l’outil de validation pour tester votre code
-
vous pouvez aussi afficher les fichiers
html:MapHasha.htmlMapHashb.htmlMapHashc.html- (à la racine du projet)
Tester l’efficacité du code #
-
Les méthodes de votre
TesteurDeMapAbstraitseront appelées- typiquement, utiliser une boucle pour effectuer une opération un certain nombre de fois
-
Vous devriez avoir des résultats similaires aux résultats ci-bas
fairePlusieursAjoutsAleatoires:
fairePlusieursModificationsAleatoires:
fairePlusieursRetraitsAleatoires:
-
accederAuxClesDansOrdre:
- (*) ce graphe semble varier beaucoup d’un ordi à l’autre