Conception Orienté Objet
et Programmation Java
Chapitre 11 : MAP
Objectifs du chapitre
● Découvrir l’interface MAP , son architecture ainsi que les classes qui
l’implémentent
● Savoir différencier entre HashMap et TreeMap
2
MAP
3
Architecture
Interface
Map
4
MAP… Par définition
Une map est une structure qui associe une clé (Key) à une valeur (Value) ( Map<K,V> ).
On peut penser à la clé comme étant le mécanisme d'accès à la valeur correspondante dans la
Map. Key Value
La clé est utilisée pour indexer la valeur, permettant ainsi une recherche rapide d'une valeur
donnée en utilisant sa clé.
Dans une Map la clé est unique, contrairement à la valeur qui peut être associée à plusieurs clés.
NB: La redéfinition des méthodes hashCode et equals est nécessaire pour la clé
5
Notez Bien!....
Map n’est pas une Collection !!!
La raison pour laquelle Map n’est pas une
Collection est liée à la nature distincte de ces
deux structures de données :
● Une Collection représente un ensemble
d'éléments, où chaque élément est une
entité individuelle.
● Une Map est une structure de données
qui stocke des paires clé-valeur, où
chaque élément correspond à une
association entre une clé et une valeur.
6
Architecture
L’interface Map peut être implémentée avec les classes:
❖ HashMap: ne garantie pas l'ordre d'insertion des éléments lors de
parcours.
❖ TreeMap: stocke les éléments triés selon leurs clés.
7
MAP… Un simple exemple
“ow
Values: ” w”
r k ow eo
“ba ow” “m
Keys: “chien” “pinnipèdes” “chat”
[key = “chien”, value = “bark”]
[key=“chat”, value=“meow”]
[key=“pinnipèdes”, value=“ow ow ow”]
8
MAP… Quelques méthodes utiles
Méthode Explication Paramètres Type de retour
put(K key, V value) Ajoute une paire clé-valeur à la Map ou K : type de la clé, V : la valeur précédemment
remplace la valeur existante pour une clé V : type de la associée à la clé donnée, ou
donnée. La méthode renvoie la valeur valeur null
précédemment associée à la clé donnée, ou
null si aucune valeur n'était associée à cette
clé.
get(K key) Récupère la valeur associée à la clé donnée, ou K : la clé V : la valeur associée à la clé
null si la clé n'existe pas dans la Map. donnée, ou null
remove(K key) Supprime la paire clé-valeur associée à la clé K : la clé V : la valeur associée à la clé
donnée. La méthode renvoie la valeur associée donnée, ou null
à la clé donnée, ou null si la clé n'existe pas
dans la Map.
containsKey(K key) Vérifie si la Map contient la clé donnée. La K : la clé boolean : true si la Map 9
méthode renvoie true si la Map contient la clé, contient la clé, false sinon
MAP… Quelques méthodes utiles
Méthode Explication Paramètres Type de retour
size() Renvoie le nombre de paires clé-valeur dans la - int : le nombre de paires clé-
Map. valeur dans la Map
isEmpty() Vérifie si la Map est vide. La méthode renvoie - boolean : true si la Map est
true si la Map ne contient aucune paire clé- vide, false sinon
valeur, et false sinon.
keySet() Renvoie un ensemble contenant toutes les clés - Set<K> : un ensemble
de la Map. La méthode renvoie un objet Set contenant toutes les clés de la
qui peut être utilisé pour parcourir les clés de Map
la Map.
values() Renvoie une collection contenant toutes les - Collection<V> : une collection
valeurs de la Map. La méthode renvoie un contenant toutes les valeurs de
objet Collection qui peut être utilisé pour la Map
parcourir les valeurs de la Map.
10
[Link]<K,V>
L’interface Map contient une interface interne [Link]<K,V> est pour représenter
une couple clé-valeur.
Cette interface définit 3 méthodes:
● V getValue()
● K getKey()
● V setValue(V value)
La méthode entrySet() de Map renvoie un objet de type Set<[Link]<K, V>>
11
HashMap
12
HashMap… par définition
La classe HashMap présente plusieurs caractéristiques :
- Elle permet l'utilisation de la valeur null comme clé et comme
valeur.
- Elle ne garantit aucun ordre lors du parcours des éléments.
13
Map : exemple (1/4)
// Creating a HashMap
Map<String, Integer> studentScores = new HashMap<>();
// Adding key-value pairs
[Link]("Alice", 12);
[Link]("Bob", 15);
[Link]("Charlie", 14);
[Link]("David", 20);
// Getting the value for a specific key
String studentName = "Bob";
int score = [Link](studentName);
[Link](studentName + "'s score: " + score); // Output: Bob's score: 15
// Checking if a key is present (equals(Object o) override needed)
String newStudent = "Eva";
if ([Link](newStudent)) {
[Link](newStudent + " is in the map.");
} else {
[Link](newStudent + " is not in the map.");
}
// Output: Eva is not in the map. 14
Map : exemple (2/4)
// Removing a key-value pair
String removeStudent = "Charlie";
[Link](removeStudent);
[Link](removeStudent + " has been removed.);
// Output: Charlie has been removed.
// Displaying the map (toString() override needed for both Key and Value)
[Link]("Student Scores: " + studentScores);
// Output: Student Scores: {Bob=15, Alice=12, David=20}
// Looping and displaying keys
// Output:
Set<String> keys = [Link](); Key: Bob
Iterator<String> iterator = [Link](); Key: Alice
while ([Link]()) { Key: David
[Link]("Key: " + [Link]());
}
15
Map : exemple (3/4)
// Looping and displaying values
// Output:
Collection<Integer> values = [Link](); Value: 15
for (Integer value : values) { Value: 12
[Link]("Value: " + value); Value: 20
}
// Looping and displaying both keys and values // Output:
for ([Link]<String, Integer> entry : [Link]()){ Bob: 15
[Link]([Link]() + ": " + [Link]()); Alice: 12
} David: 20
// Checking the size of the map
[Link]("Number of students: " + [Link]());
// Output: Number of students: 3
16
Map : exemple (4/4)
// Checking the size of the map
[Link]("Number of students: " + [Link]());
// Output: Number of students: 3
// Clearing the map
[Link]();
// Check if the map is empty
[Link]("Is the map empty? " + [Link]());
// Output: Is the map empty? true
17
TreeMap
18
TreeMap… par définition
La classe TreeMap, ajoutée à Java 1.2, est une Map qui stocke des éléments de manière
triée.
Les éléments de la collection sont triés selon l'ordre naturel de leur clé (s'ils
implémentent l'interface Comparable) ou en utilisant une instance de type Comparator
fournie au constructeur de la collection.
Elle implémente les interfaces Map et SortedMap.
19
TreeMap : exemple (1/2)
// Comparator for sorting by length of students names
Comparator<String> nameLengthComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return [Link]() - [Link]();
}
};
// Comparator for sorting Alphabetically
Comparator<String> alphabeticComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return [Link](o2);
}
};
// Creating a TreeMap with a combined comparator (first by length, then
Alphabetically)
Map<String, Integer> studentScores = new
TreeMap<>([Link](alphabeticComparator));
20
TreeMap : exemple (2/2)
// Adding key-value pairs to the TreeMap
[Link]("David", 20);
[Link]("Charlie", 14);
[Link]("Bob", 15);
[Link]("Alice", 12);
// Displaying the sorted map
[Link]("Student Scores (first by length, then Alphabetically): " +
studentScores);
// Output:
Student Scores (first by length, then Alphabetically):
{Bob=15, Alice=12, David=20, Charlie=14}
21
LIST, SET ou MAP … Quoi
utiliser?
● Si vous ne souhaitez pas que les valeurs soient dupliquées dans la base de données,
Set doit être votre premier choix, car toutes ses classes n’autorisent pas les
doublons.
● Si des opérations de recherche fréquentes basées sur les valeurs d’index sont
nécessaires, alors List (ArrayList) constitue un meilleur choix.
● S’il est nécessaire de maintenir l’ordre d’insertion, List est également préférée.
● Si l’exigence est d’avoir un mappage clés/valeurs, alors Map est votre meilleur
choix.
22
LIST Vs. SET Vs. MAP
23
Merci pour votre attention
24