Queue
étend l'interface
Collection
), avec quelques différences sémantiques. L'utilisation classique d'une file d'attente, est de servir de tampon entre une source d'objets et un consommateur de ces mêmes objets.
Traditionnellement, une file d'attente expose trois types de méthodes :
false
.
Traditionnellement, on définit deux types de files d'attente : FIFO (qui signifie
first in first out
), et LIFO (
last in, first out
). La spécification de l'interface
Queue
nous indique qu'il est de la responsabilité de l'implémentation de définir quel type de fonctionnement elle adopte.
Queue
, qui modélise une file d'attente simple, expose six méthodes, qui sont les suivantes.
add(T t)
et
offer(T t)
permettent d'ajouter un élément à la liste. Si la capacité maximale de la liste est atteinte, alors
add()
jette une exception de type
IllegalStateException
, et
offer()
retourne
false
.
remove()
et
poll()
retirent toutes les deux de cette file d'attente. Si aucun élément n'est disponible, alors
remove()
jette une exception de type
NoSuchElementException
, tandis que
poll()
retourne
null
.
element()
et
peek()
examinent toutes les deux l'élément disponible, sans le retirer de la file d'attente. Si aucun élément n'est disponible, alors
element()
jette une exception de type
NoSuchElementException
, tandis que
peek()
retourne
null
.
Queue
, ajoutée en Java 6.
Elle définit la notion de file d'attente à double extrémité : il est possible d'ajouter des éléments au début de la file ou à la fin, avec la même sémantique que pour
Queue
.
Suivant la logique de la construction de
Queue
,
Deque
expose trois types de méthodes, qui permettent d'ajouter, de retirer, ou d'examiner l'élément suivant de la file. Chacune de ces méthodes existe en deux versions : la première agit sur une extrémité de la file, et la seconde sur l'autre. Chacune de ces méthodes existe encore en deux versions : la première jette une exception en cas d'échec, la seconde retourne
false
. Cela fait un total de douze méthodes, que l'on peut regrouper dans les tableaux suivants.
Tableau 1. Méthodes de
Deque
Jette une exception |
Retourne
false
|
||
---|---|---|---|
Insertion |
addFirst(T t) /
addLast(T t)
|
offerFirst(T t) /
offerLast(T t)
|
|
Retrait |
removeFirst(T t) /
removeLast(T t)
|
pollFirst(T t) /
pollLast(T t)
|
|
Examen |
getFirst(T t) /
getLast(T t)
|
peekFirst(T t) /
peekLast(T t)
|
Deque
expose également les deux méthodes
iterator()
et
descendingIterator()
, qui permettent d'itérer dans les deux sens de la file d'attente.
Enfin, elle expose deux méthodes
removeFirst(Object)
et
removeLast(Object)
, qui permettent de retirer respectivement la première et la dernière occurrence de l'objet passé en paramètre.
Blocking
au milieu, et c'est dans ce domaine que leur importance est la plus grande. Nous verrons donc des exemples d'utilisation très précis dans ce contexte, dans le chapitre sur la programmation concurrente.