L'API Collection est une des API utilitaires les plus utilisées en Java. Elle a été introduite dans la version 1.2 de Java, et a été entièrement réécrite en Java 5, pour supporter l'utilisation des génériques.
À la base de cette API se trouvent trois interfaces :
Collection
et
Map
, qui modèlisent respectivement les collections et les tables de hachage, et
Iterator
, qui modèlise les itérateurs que l'on peut construire sur ces objets. Ces trois interfaces sont présentes dans l'API Java depuis la version 1.2.
Une troisième interface,
Iterable
ne fait pas partie strictement de l'API Collection. Elle a été introduite en Java 5, lorsque le
for each
a été ajouté au langage. Nous allons toutefois la voir ici, car l'ensemble des éléments de l'API Collection implémente cette interface.
Enfin, quelques éléments ont été ajoutés à cette API en Java 6 :
DeQue
,
NavigableMap
et
NavigableSet
.
Les interfaces
Collection
et
Map
sont la base d’un ensemble d’interfaces et de classes qui ont pour but de faciliter la manipulation des ensembles structurés de données. Parmi ces ensembles, citons les listes chaînées, les listes ordonnées, les vecteurs, les tableaux, les tables de hachages.
Ces interfaces nous fournissent un ensemble de méthodes qui permettent d’accéder à ces données de façon naturelle suivant le type de structure choisie. Elles sont rangées dans le paquet
java.util
.
Les ensembles sont gérés par la hiérarchie qui étend l'interface
Collection
. De l’interface
Collection
, dérivent directement ou non toutes les autres. Une instance de
Collection
est un ensemble d’objets, non ordonné, et dans lequel on peut trouver des objets dupliqués.
L’interface
Collection
est étendue par l’interface
List
, qui ajoute la notion d’ordre à
Collection
. Cette liste est indexée par des entiers, l’utilisateur a donc le contrôle de l’endroit où il insère un élément. Elle est également étendue par l’interface
Set
, qui interdit d’avoir deux éléments identiques dans l’ensemble. Enfin, l’interface
Set
est étendue par l’interface
SortedSet
, qui ajoute la notion d’ordre à
Set
.
En Java 5, l'interface
Queue
s'ajoute aux interfaces qui étendent
Collection
. Cette interface modélise une file d'attente, à laquelle on peut ajouter des éléments ou en retirer.
En Java 6, s'ajoute encore l'interface
DeQue
(
double-ending queue
), qui étend
Queue
. Cette interface permet d'ajouter ou de retirer des éléments des deux côtés de la file d'attente modélisée.
Nous verrons que ces deux interfaces sont également étendues par
BlockingQueue
et
BlockingDeque
, deux files d'attente créées pour les opérations concurrentes.
Enfin, les tables de hachage sont gérées par l’interface
Map
, elle-même étendue par
SortedMap
, qui ajoute la notion d’ordre à
Map
.
À chacune de ces interfaces sont associées des classes concrètes qui permettent de les instancier. Toutefois, il est fortement conseillé d’associer un de ces types à ces classes concrètes, pour des raisons de compatibilité et de lisibilité.