Bonjour,

j'ai écrit différentes méthodes pour gérer une map :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import java.util.*;
 
public class TestMap {
    private Map<Couple, List<String>> map;
 
    public TestMap(){
	map = new HashMap<Couple, List<String>>();
	//Rempli la map
	rempli_map();
    }
 
    void afficheMap(){
	//iterateur sur la map
	Iterator it = getMap().entrySet().iterator();
	while (it.hasNext()){
	    Map.Entry pairs = (Map.Entry)it.next();
	    Couple couple = (Couple)pairs.getKey();
	    System.out.print(couple.getString() + " " + couple.getInt() + " : ");
	    List<String> liste = (List<String>)pairs.getValue();
	    for(int i=0; i<liste.size(); i++)
		System.out.print(liste.get(i) + " ");
	    System.out.println("");
	}
    }
 
    void setMap(Couple couple, List<String>liste){
	map.put(couple,liste);
    }
 
    Map<Couple, List<String>> getMap(){
	return map;
    }
 
    //recherche si le mot donne en parametre est dans la map
    Couple recherche_map(String mot){
	//iterateur sur la map
	Iterator it = getMap().entrySet().iterator();
	while (it.hasNext()){
	    Map.Entry pairs = (Map.Entry)it.next();
	    Couple couple = (Couple)pairs.getKey();
	    List<String> liste = (List<String>)pairs.getValue();
	    for(int i=0; i<liste.size(); i++)
		if(liste.get(i).equals(mot))//on a trouve le mot
		    return couple;//on retourne le couple correspondant
	}
	return null;//le mot n'est pas present
    }
 
    //rempli la map
    public void rempli_map(){
	Couple couple1 = new Couple("couple1",10);
	List<String> liste1 = new ArrayList<String>();
	liste1.add("un");
	liste1.add("deux");
	liste1.add("trois");
	setMap(couple1,liste1);
 
	Couple couple2 = new Couple("couple2",20);
	List<String> liste2 = new ArrayList<String>();
	liste2.add("quatre");
	liste2.add("cinq");
	liste2.add("six");
	setMap(couple2,liste2);
    }
 
    //ajoute un mot au couple donne en parametre
    boolean ajouteMot(Couple couple, String mot){
	boolean found = false;
	if(getMap().containsKey(couple)){
	    List<String> liste = getMap().get(couple);
	    liste.add(mot);
	    setMap(couple, liste);
	    found = true;
	}
	return found;
    }
 
 
    public static void main(String [] args){
	TestMap map = new TestMap();
	map.afficheMap();
	Couple couple = map.recherche_map("un");
	if(couple != null){
	    System.out.println("le couple qui gere le mot 'un' est : " + couple.getString() + " " + couple.getInt());
	}
 
	Couple c = new Couple("couple1",10);
	boolean found = map.ajouteMot(c, "neuf");
	if(found){
	    System.out.println("le mot 'neuf' a ete ajoute a la map");
	}
	else{
	    System.out.println("le mot 'neuf' n'a pas ete ajoute car le couple '(couple1,10)' n'est pas dans la map");
	}
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
//Couple.java
public class Couple{
    private String s;
    private Integer val;
 
    public Couple(String s, Integer val){
	this.s = s;
	this.val = val;
    }
 
    public String getString(){
	return s;
    }
 
    public Integer getInt(){
	return val;
    }
}
A l'execution du programme, j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
java TestMap
couple1 10 : un deux trois
couple2 20 : quatre cinq six
le couple qui gere le mot 'un' est : couple1 10
le mot 'neuf' n'a pas ete ajoute car le couple '(couple1,10)' n'est pas dans la map
Je ne comprends pas pourquoi le mot "neuf" n'est pas ajouté à la map alors que le couple est présent.

La méthode qui pose proiblème est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
//ajoute un mot au couple donne en parametre
    boolean ajouteMot(Couple couple, String mot){
	boolean found = false;
	if(getMap().containsKey(couple)){
	    List<String> liste = getMap().get(couple);
	    liste.add(mot);
	    setMap(couple, liste);
	    found = true;
	}
	return found;
    }