Académique Documents
Professionnel Documents
Culture Documents
I. Introduction
Une collection est une structure de données dynamique qui permet de gérer être n'importe
quel ensemble d'éléments de même type.
Tableaux : Collections :
- Non redimensionnables - Choix de l'implémentation (complexité)
- L'insertion nécessite un décalage et de l'interface
- Les indices doivent être des entiers - Structures dynamiques
- Légers en mémoire et accès en O(1) - Algorithmes communs
- Plus gourmandes en mémoire
Les classes et les interfaces de gestion de collections se situent dans le paquetage java.util.Les
collections implémentent toutes une interface. Celle-ci comprend un ensemble de méthodes
(dont certaines sont optionnelles) visant la gestion des collections. Il existe trois grandes
familles de collections, chacune définie par une interface de base :
• Les listes (interface List) sont des structures capables de contenir des objets de
différents types accessibles séquentiellement. Les objets de type List servent à stocker
des objets sans condition particulière sur la façon de les stocker. Ils acceptent toutes les
valeurs, même les valeurs null
• Les ensembles (interface Set) sont des structures contenant des éléments non dupliqués
dont l'accès reste très performant. Les objets de types Set sont donc un peu plus
restrictifs (pas de doublons) ce qui est pratique pour une liste d'éléments uniques, par
exemple.
• Les tableaux associatifs (interface Map) sont des structures qui permettent de lier un
objet clé à un autre objet valeur. Elles fonctionnent avec un système « clé - valeur »
pour ranger et retrouver les objets qu'elles contiennent
POO Avancée : PROGRAMMATION OBJET AVANCEE
Spécialité : DSI 2.2
LinkedList VS ArrayList/Vector:
Contrairement aux LinkedList, les ArrayList/ Vector sont rapides en lecture, même avec un
gros volume d'objets. Elles sont cependant plus lentes si vous devez ajouter ou supprimer des
données en milieu de liste. Pour résumer, si vous effectuez beaucoup de lectures sans vous
soucier de l'ordre des éléments, optez pour une ArrayList ou un Vector ; en revanche, si vous
insérez beaucoup de données au milieu de la liste, optez pour une Linkedlist.
Depuis la version 5, nous pouvons préciser le type des éléments contenus dans la collection
(si tous les éléments sont de même type) en écrivant :
LinkedList<Type> maListe = new LinkedList<Type>();
➔ Exemple :
LinkedList<String> maListe = new LinkedList<String>();
Par exemple, le parcours d'une liste nommée maListe peut se faire de la manière
suivante :
Iterator iterateur= maListe.iterator();
while (iterateur.hasNext()) System.out.println(iterateur.next());
Remarque : les Maps n'implémentant pas l'interface Iterable, ils ne permettent pas d'être
parcourus à l'aide d'un itérateur
• La boucle FOR-EACH : La version 5 de Java introduit une nouvelle boucle qui
simplifie le parcours d’une collection : la boucle for-each.
Par exemple, le parcours d'une liste d’entiers, nommée maListe peut se faire de la
manière suivante
Cette boucle est d’un usage très intuitif. Cependant, on remarquera qu’il n’est pas possible de
supprimer des éléments de la collection si on la parcoure avec un for-each.
Il est possible de parcourir une collection de type liste, de la même façon (ou presque) qu’on
parcoure un tableau. Par exemple, le parcours d'une liste d’entiers, nommée maListe peut se
faire de la manière suivante :
Exemple complet :
}
}
POO Avancée : PROGRAMMATION OBJET AVANCEE
Spécialité : DSI 2.2
➔ Exemple :
LinkedList<String> maListe = new LinkedList<String>();
Collections.sort(maListe);
NB : Cet exemple fonctionne que si les éléments dans la liste sont de type Comparable, comme
int, String, Date…
Un autre type de structure de données utilisable en Java est le Map. Une map permet de créer
un ensemble de couples clé/valeur (On parle aussi de tableaux associatifs), la clé permettant de
retrouver rapidement la valeur qui lui a été associée. Les clés sont des objets uniques pouvant
être NULL; Les valeurs peuvent être multiples et NULL.
On retrouve principalement quatre classes qui implémentent l'interface Map : HashTable,
HashMap, LinkedHashMap et TreeMap.
Object
Associe la clé à la valeur spécifiée, et retourne la valeur
put(Object key, Object value) précédemment associée.
boolean putAll(Map m) Ajouter tous les objets d'une autre collection à celle-ci.
Object
Retourne la valeur associée à la clé spécifiée, ou null si
get(Object key) non trouvé.
Object remove(Object key) Supprime l'objet associé à la clé, et retourne cet objet.
Exemple :
public class TestMap {
public static void main(String[] args) {
Les objets Maps ont comme point faible majeur : leur rapport conflictuel avec la taille des
données à stocker. En effet, plus vous aurez de valeurs à mettre dans un objet Map, plus celles-
ci seront lentes et lourdes : logique, puisque par rapport aux autres collections, il stocke une
donnée supplémentaire par enregistrement.
Résumé et comparatif :
Exercice 1
1. Créer un programme Java qui crée une collection (ArrayList) de noms de pays puis
alimenter cette collection avec quelques valeurs et afficher la taille de la collection
2. Compléter le programme pour afficher le contenu de la collection (Utiliser trois méthodes
différentes).
3. Trouver une méthode pour vider la collection et modifier votre programme pour afficher
un message d’erreur lorsqu’elle est vide et afficher le contenu lorsqu’elle n’est pas vide.
4. Après avoir de nouveau alimenté votre liste de pays, modifiez le nom d’un pays et
affichez de nouveau la liste des pays.
Indication: Pour modifier le nom, il faut supprimer un élément (remove) et en ajouter un autre
(add). Il y a plusieurs méthodes pour ajouter ou supprimer des éléments dans une collection de
type ArrayList. Choisissez celle que vous voulez!
5. Triez votre collection et ré-affichez la liste des pays
Indication: ¨Pour trier une ArrayList, vous pouvez utiliser la méthode sort de Collections avec
la syntaxe suivante : Collections.sort(uneArrayList)
Exercice 2
Ecrire un programme java utilisant les listes chaînées (LinkedList) et qui réalise les opérations
suivantes:
1. Construire une liste A contenant 4 noms (chaînes de caractères). Faire de même pour une
autre liste B contenant 6 noms.
2. Rajouter la chaine "Hello World" à la fin de A.
3. Rajouter la chaine " Bonjour" au début de B
4. Afficher le premier élément de la liste A
5. Afficher le dernier élément de la liste B
6. Rajouter les éléments de B à la fin de A.
7. Retirer de la liste B un élément sur deux.
8. Afficher le contenue de la liste A de deux façons différentes
Exercice 3
On souhaite gérer un ensemble d'étudiants. Chaque étudiant sera défini par une classe Etudiant
et devra présenter les informations suivantes: une matricule, un nom et une liste de notes (de
taille indéfinie).
La classe Note permettra de contenir pour chaque matière, l'intitulé de la matière ainsi que la
note obtenue. La liste des notes de chaque étudiant seront stockées dans une ArrayList.
- La méthode toString()
Exercice 4
Développez une application qui permet de mémoriser dans une HashMap les données (cin :
Integer , nom : String, prénom : String , adresse : String, date de naissance : Date) d'étudiants.
Utilisez le numéro CIN comme clé.
Essayez d'ajouter plusieurs fois le même étudiant / la même clé. Que remarquez-vous ?
Remplacez la structure HashMap par TreeMap. Quelles modifications faut-il faire ?
Quelles différences voyez-vous dans votre programme ?
Exercice 5
On souhaite implémenter un annuaire électronique, qui donne pour chaque nom de contact,
ses coordonnées (N°tel & Adresse).
1. Définir la classe Coordonnees, composée de :
• Deux attributs Tel et Adr de type String
• Un constructeur qui permet d’initialiser tous les attributs
• Les getters et les setters de tous les attributs.
• La méthode toString()
POO Avancée : PROGRAMMATION OBJET AVANCEE
Spécialité : DSI 2.2
2. Définir la classe Annuaire qui gère l’annuaire électronique à l’aide d’une collection
de type HashMap. Cette collection associe à chaque nom, un objet de type
Coordonnees. La classe Annuaire comporte les éléments suivants :
• Un attribut privée listAnnuaire de type HashMap. Utiliser le nom contact (de
stype String) comme clé et ses coordonnées (de type Coordonnees ) comme
valeur.
• public ajouter (String N, Coordonnees C) : Ajout d’un nouveau contact
• public afficherCoord (String N): Affichage des coordonnées d’un contact
• public modifierCoord (String N): Modification des coordonnées d’un contact
• public supprimer (String N): Suppression d’un contact
• public listerNoms (): Affichage de la liste des contacts (tous les noms).
• public listerTel ():Affichage de les liste des N° de Tel de l’annuaire.
• public listerAdr ():Affichage de la liste des Adresses de l’annuaire.
• public afficherAnnuaire ():Affichage de la totalité de l’annuaire.
Exercice 6
On souhaite gérer un ensemble d'étudiants. Chaque étudiant sera défini par une classe
Etudiant et devra présenter les informations suivantes:
- une matricule
- un nom
- une liste de notes (de taille indéfinie).
Exercice 7
Développez un dictionnaire anglais-français (bi-directionnel) en employant la structure
prédéfinie TreeMap.
Sur quelles difficultés tombez-vous, si vous voulez ajouter plusieurs traductions pour le même
mot ?