Maîtriser les Collections Java : Guide complet des structures de données efficaces
Avant Java 2, Java fournissait des classes ad hoc (Dictionary, Vector, Stack, Properties) pour stocker/manipuler des groupes d'objets. Utiles mais sans thème unificateur central.
Le Collections Framework a été conçu pour :
- Haute performance (implémentations efficaces : tableaux dynamiques, listes chaînées, arbres, tables de hachage)
- Interopérabilité : collections travaillant de manière similaire
- Extensibilité : adapter/étendre facilement une collection
Architecture unifiée autour d'interfaces standards. Implémentations fournies (LinkedList, HashSet, TreeSet, etc.) utilisables telles quelles ou personnalisables.
Un framework de collections contient :
- Interfaces : types de données abstraits représentant les collections. Manipulation indépendante de la représentation. Hiérarchie d'interfaces.
- Implémentations (Classes) : implémentations concrètes des interfaces. Structures de données réutilisables.
- Algorithmes : méthodes utiles (tri, recherche) sur objets implémentant les interfaces. Polymorphes : même méthode sur différentes implémentations.
Le framework définit aussi des interfaces/classes Map (paires clé/valeur). Bien que non "collections" au sens strict, elles sont pleinement intégrées.
Interfaces de collection
| Interface | Description |
|---|---|
Collection | Racine de la hiérarchie. Groupes d'objets. |
List | Étend Collection. Collection ordonnée, doublons autorisés. |
Set | Étend Collection. Ensemble sans doublons. |
SortedSet | Étend Set. Ensemble trié. |
Map | Associe clés uniques à valeurs. |
Map.Entry | Élément (paire clé/valeur) dans une Map. Classe interne. |
SortedMap | Étend Map. Clés maintenues triées. |
Enumeration | Legacy. Remplacée par Iterator. |
Classes de collection standards
| Classe | Description |
|---|---|
AbstractCollection | Implémente la plupart de Collection |
AbstractList | Étend AbstractCollection, implémente List |
AbstractSequentialList | Pour accès séquentiel (vs aléatoire) |
LinkedList | Liste chaînée (extends AbstractSequentialList) |
ArrayList | Tableau dynamique (extends AbstractList) |
AbstractSet | Implémente Set |
HashSet | Set basé sur table de hachage (extends AbstractSet) |
LinkedHashSet | HashSet + ordre d'insertion |
TreeSet | Set basé sur arbre (extends AbstractSet) |
AbstractMap | Implémente Map |
HashMap | Map basée sur table de hachage |
TreeMap | Map basée sur arbre |
WeakHashMap | Map avec clés faibles (GC) |
LinkedHashMap | HashMap + ordre d'insertion |
IdentityHashMap | Égalité par référence (==) |
Classes abstraites squelettes : AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList, AbstractMap — minimisent l'effort d'implémentation.
Classes legacy (java.util)
| Classe | Description |
|---|---|
Vector | Tableau dynamique, synchronisé (diffère d'ArrayList) |
Stack | Sous-classe de Vector, pile LIFO standard |
Dictionary | Abstraite, clé/valeur, comme Map |
Hashtable | Implémentation concrète de Dictionary, synchronisée |
Properties | Sous-classe Hashtable, clés/valeurs String |
BitSet | Tableau de bits redimensionnable |
Algorithmes de collection
Méthodes statiques dans la classe Collections. Peuvent lever ClassCastException (types incomparables) ou UnsupportedOperationException (collection non modifiable).
Constantes immuables : EMPTY_SET, EMPTY_LIST, EMPTY_MAP.
Utiliser un Iterator
Pour parcourir une collection. Iterator : parcours avant, suppression. ListIterator : bidirectionnel + modification éléments.
Utiliser un Comparator
TreeSet et TreeMap stockent trié. Le Comparator définit l'ordre de tri. Permet de trier une collection de multiples façons, même des classes non modifiables.
Résumé
- Accès à des structures de données préconstruites et algorithmes
- Une collection tient des références vers d'autres objets
- Interfaces déclarent les opérations par type de collection
- Classes et interfaces dans
java.util
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code