Stai cercando qualsiasi classe che implementa il Queue interface, escluso PriorityQueue
e PriorityBlockingQueue
, che non utilizzano un algoritmo FIFO.
Probabilmente uno LinkedList utilizzando add
(aggiunge uno alla fine) e removeFirst
(rimuove uno dal fronte e lo restituisce) è il più semplice da utilizzare.
Per esempio, ecco un programma che utilizza un LinkedList fare la fila e recuperare le cifre del PI:
import java.util.LinkedList;
class Test {
public static void main(String args[]) {
char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};
LinkedList<Integer> fifo = new LinkedList<Integer>();
for (int i = 0; i < arr.length; i++)
fifo.add (new Integer (arr[i]));
System.out.print (fifo.removeFirst() + ".");
while (! fifo.isEmpty())
System.out.print (fifo.removeFirst());
System.out.println();
}
}
In alternativa, se si sa desideri solo trattarlo come una coda (senza le funzionalità aggiuntive di una lista collegata), si può semplicemente utilizzare l'interfaccia Queue
stesso:
import java.util.LinkedList;
import java.util.Queue;
class Test {
public static void main(String args[]) {
char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};
Queue<Integer> fifo = new LinkedList<Integer>();
for (int i = 0; i < arr.length; i++)
fifo.add (new Integer (arr[i]));
System.out.print (fifo.remove() + ".");
while (! fifo.isEmpty())
System.out.print (fifo.remove());
System.out.println();
}
}
Questo ha il vantaggio di un che ti consente di sostituire la classe concreta sottostante con qualsiasi classe che fornisce l'interfaccia Queue
, senza dover modificare troppo il codice.
Le modifiche di base sono per cambiare il tipo di fifo
ad un Queue
e di utilizzare remove()
anziché removeFirst()
, quest'ultimo essendo disponibile per l'interfaccia Queue
.
La chiamata isEmpty()
è ancora accettabile poiché appartiene all'interfaccia Collection
di cui Queue
è un derivato.
Perché non fare in modo che sia di tipo Coda quindi? Indirizzare l'interfaccia piuttosto che l'implementazione concreta. –
@Adam, buon punto, l'ho previsto come alternativa. – paxdiablo
Se si desidera solo eseguire iterazioni sugli elementi nella coda in un modo FIFO senza rimuovere effettivamente gli elementi, è sufficiente eseguire 'for (Oggetto oggetto: coda)', e itererà su di essi in modo FIFO, a almeno su JDK 7 e con 'ArrayDeQueue' e' LinkedList' impl. –