2012-03-06 23 views

Respuesta

101

Está buscando cualquier clase que implemente el Queue interface, excluyendo PriorityQueue y PriorityBlockingQueue, que no utilizan un algoritmo FIFO.

Probablemente un LinkedList usando add (agrega uno al final) y removeFirst (quita uno del frente y lo devuelve) es el más fácil de usar.

Por ejemplo, aquí hay un programa que utiliza un LinkedList que hacer 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(); 
    } 
} 

alternativa, si sabe sólo desea tratarlo como una cola (sin las características adicionales de una lista enlazada), sólo puede utilizar la interfaz Queue sí:

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 una lo que le permite reemplazar la clase concreta subyacente con cualquier clase que proporcione la interfaz Queue, sin tener que cambiar demasiado el código.

Los cambios básicos son para cambiar el tipo de fifo a un Queue y utilizar remove() en lugar de removeFirst(), este último no esté disponible para la interfaz de Queue.

Llamar a isEmpty() sigue siendo correcto ya que pertenece a la interfaz Collection de la cual Queue es un derivado.

+2

¿Por qué no hacer que fifo sea del tipo Queue ? Apunte a la interfaz en lugar de la implementación concreta. –

+0

@ Adam, buen punto, lo he proporcionado como una alternativa. – paxdiablo

+0

Si solo desea iterar sobre los elementos en la cola de manera FIFO sin eliminar realmente los elementos, entonces puede hacer 'para (Objeto: cola)', y se repetirá sobre ellos de manera FIFO, en al menos en JDK 7 y con 'ArrayDeQueue' y' LinkedList' impl. –

16

Pruebe ArrayDeque o LinkedList, que implementan la interfaz Queue.

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html

+0

Sí, ArrayDeque y LinkedList tienen el método .push de Deque, que es lo que lo hace utilizable como una pila para FIFO. ArrayDeque es más como una matriz primitiva para usar como un buffer, mientras que LinkedList es más como un data-store. – djangofan

+0

@djangofan stack is lifo –

2

Queue s son los primeros en estructuras, primero en salir. 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 deba descargarlo o crearlo usted mismo siguiendo ese tutorial.

1

Usted no tiene que poner en práctica su propia cola FIFO, basta con ver la interfaz de java.util.Queue y sus implementaciones