Introduction Interfaces et implémentations Algorithmes Conclusion
Les collections Java
Cours Java - F. Michel
1 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Plan
1 Introduction
2 Interfaces et implémentations
3 Algorithmes
4 Conclusion
Cours Java - F. Michel
2 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Notion de Collection
Définition
Une collection est un regroupement structuré de données
En Java : c’est un objet qui structure d’autres objets
Exemple : ArrayList<E>, HashMap<K,V>, etc.
L’API des collections Java en 2 packages
java.util : les collections essentielles et le cadriciel associé
java.util.concurrent : programmation concurrente
Exemples de modélisation
Une main dans un jeu de cartes ⇒ ensemble de n cartes
Un répertoire téléphonique ⇒ tableau associatif nom → numéro
Cours Java - F. Michel
4 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Les collections framework orientés objet
Des interfaces
Définissent les opérations possibles sur un type de collection
E.g. List<E>, Map<K,V>, Queue<E>. . .
Des implémentations
Les classes qui implémentent les interfaces
E.g. ArrayList<E>, HashMap<K,V>, ArrayDeque<E>. . .
Des algorithmes
Méthodes polymorphes manipulant les collections
E.g. Collections.sort(List<T> list)
Exemples : STL en C++ collections SmallTalk et hors POO Python . . .
Cours Java - F. Michel
5 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Bénéfices
Utilisation
Programmation sans effort : pas de code bas niveau, pas d’algo
Rapidité et qualité du code : implémentations éprouvées
Standardisation
Interopérabilité entre APIs développées indépendamment
Facilite la prise en main de nouvelles APIs
Facilite la création de nouvelles APIs
Promeut la réutilisation des nouvelles collections développées
Cours Java - F. Michel
6 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Les interfaces
Cours Java - F. Michel
8 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Collection<E>
Définit toutes les opérations possibles sur tout type de
collection :
Cours Java - F. Michel
9 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Collection<E>
Cours Java - F. Michel
10 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Collection<E>
remarques
Générique
Nécessite de spécifier le type E des objets contenus
implémente java.lang.Iterable<T>
définit des méthodes permettant une itération sur la collection
Certaines méthodes sont documentées optional
Évite une exposition du nombre d’interfaces dans l’API
Il existe des collections immutable, fixed-size, append-only . . .
Elles ne permettent donc pas toutes certaines opérations
⇒ java.lang.UnsupportedOperationException
Cours Java - F. Michel
11 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Collection<E>
Sous-types
Types de Collection aux comportements spécialisés
Set<E> : collection non ordonnée d’objets non égaux
SortedSet<E> : collection triée d’objets non égaux
List<E> : collection d’objets indexés
Queue<E> : file d’objets à traiter, e.g. en mode FIFO
Deque<E> : file où on peut traiter le début ou la fin (e.g. LIFO)
Cours Java - F. Michel
12 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Interface java.util.Set<E>
Cours Java - F. Michel
13 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Exemple d’implémentation de Set<E>
java.util.HashSet<E>
Cours Java - F. Michel
14 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Exemple d’utilisation de
java.util.HashSet<E>
java FindDups i came i saw i left
⇒
4 distinct words: [left, came, saw, i]
Cours Java - F. Michel
15 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Exemple d’utilisation de
java.util.HashSet<E>
java FindDups2 i came i saw i left
⇒
Unique words: [left, saw, came]
Duplicate words: [i]
Cours Java - F. Michel
16 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Interface java.util.List<E>
Cours Java - F. Michel
17 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Interface java.util.List<E>
Cours Java - F. Michel
18 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Implémentation java.util.ArrayList<E>
Cours Java - F. Michel
19 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Autre implémentation
java.util.LinkedList<E>
⇒ sera, par exemple, plus rapide qu’une ArrayList si on
travaille fréquemment avec des indices se trouvant à l’intérieur
de la liste
Cours Java - F. Michel
20 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
L’interface java.util.ListIterator<E>
Cours Java - F. Michel
21 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
L’interface java.util.SortedSet<E>
Cours Java - F. Michel
22 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Exemple avec java.util.TreeSet<E>
⇒
[2020, abc, another, test]
Cours Java - F. Michel
23 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Queue<E>
Cours Java - F. Michel
24 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Deque<E>
Cours Java - F. Michel
25 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.Map<K,V>
Tableau associatif : clé → valeur
API de Map<K,V>
Cours Java - F. Michel
26 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
java.util.SortedMap<K,V>
Tableau associatif trié sur les clés
API de SortedMap<K,V>
Cours Java - F. Michel
27 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
La classe java.util.Collections
Fournit un grand nombre de méthodes statiques permettant de
travailler avec les collections : max, min, sort, reverse,
search. . .
java.util.Collections
Cours Java - F. Michel
29 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
L’interface java.util.stream.Stream
Les collections permettent de créer des Stream sur elles : une séquence d’éléments sur laquelle on peut appliquer
divers traitement, possiblement chaînés.
java.util.stream.Stream
Cours Java - F. Michel
30 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Exemple de code
Cours Java - F. Michel
31 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Diagramme de classes partiel
Image tirée du Wiki book sur les collections Java Description complète du cadriciel par Oracle
Cours Java - F. Michel
33 / 34
Introduction Interfaces et implémentations Algorithmes Conclusion
Conclusion
Philosophie
Quelque soit le langage, il faut utiliser les collections
prédéfinies
Il faut chercher jusqu’à trouver celle qui répond parfaitement à
vos besoins
Conséquences
Probablement, vous ne coderez jamais plus une nouvelle
collection
ni d’algorithme dédié de type filtre, agrégation, mapping, etc.
Vous écrirez la condition du filtre, la donnée à agréger, etc.
Dans le cas contraire : vous faites fausse route !
Ce cours est basé sur le tutoriel d’Oracle : Oracle Java Tutorial
Cours Java - F. Michel
34 / 34