lifo - Clase FIFO en Java
lifo java (6)
No tiene que implementar su propia cola FIFO, solo mire la interfaz java.util.Queue y sus implementaciones
Quiero implementar FIFO a través de una clase en Java.
¿Ya existe tal clase? Si no, ¿cómo puedo implementar el mío?
NOTA
Encontré una clase aquí http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html , pero no contiene dmg.util. *. No sé si ese paquete existe.
Pruebe ArrayDeque
o LinkedList
, que implementan la interfaz Queue
.
http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html
Puedes usar LinkedBlockingQueue Lo uso en mis proyectos. Es parte de Java estándar y bastante fácil de usar
si desea tener un conducto para escribir / leer datos, puede usar el http://docs.oracle.com/javase/6/docs/api/java/io/PipedWriter.html
Las colas son estructuras de Primero en entrar primero. Su solicitud es bastante vaga, pero supongo que solo necesita la funcionalidad básica que suele aparecer en las estructuras de Queue. Puede ver cómo puede implementarlo here .
Con respecto a su paquete faltante, lo más probable es que necesite descargar o crear el paquete usted mismo siguiendo ese tutorial.
Está buscando cualquier clase que implemente la interfaz Queue , excluyendo PriorityQueue
y PriorityBlockingQueue
, que no usan un algoritmo FIFO.
Probablemente, una LinkedList usa add
(agrega una al final) y removeFirst
(elimina una desde el frente y la devuelve) es la más fácil de usar.
Por ejemplo, aquí hay un programa que usa LinkedList para poner en cola y recuperar los dígitos de 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();
}
}
Alternativamente, si sabe que solo desea tratarlo como una cola (sin las características adicionales de una lista vinculada), puede usar la interfaz Queue
:
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();
}
}
Esto tiene la ventaja de permitirle reemplazar la clase concreta subyacente con cualquier clase que proporcione la interfaz Queue
, sin tener que cambiar el código demasiado.
Los cambios básicos son cambiar el tipo de fifo
a una Queue
y usar remove()
lugar de removeFirst()
, este último no está disponible para la interfaz de Queue
.
La llamada a isEmpty()
sigue estando bien, ya que pertenece a la interfaz de Collection
de la cual Queue
es una derivada.