Classe FIFO en Java
Je veux implémenter FIFO via une classe en Java.
Une telle classe existe-t-elle déjà? Sinon, comment puis-je implémenter le mien?
NOTE
J'ai trouvé une classe ici http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html, mais il ne contient pas de dmg.util.*. Je ne sais pas si un tel paquet existe même.
6 réponses
Vous recherchez n'importe quelle classe qui implémente l'interface de file d'attente , à l'exclusion de PriorityQueue
et PriorityBlockingQueue
, qui n'utilisent pas d'algorithme FIFO.
Probablement un LinkedList utiliser add
(ajoute un à la fin) et removeFirst
(supprime une de l'avant et le renvoie) est le plus facile à utiliser.
Par exemple, voici un programme qui utilise une LinkedList pour mettre en file D'attente et récupérer les chiffres 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();
}
}
Alternativement, si vous connaissez vous voulez seulement traitez-le comme une file d'attente (sans les fonctionnalités supplémentaires d'une liste liée), vous pouvez simplement utiliser l'interface Queue
elle-même:
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();
}
}
Cela a l'avantage de vous permettre de remplacer la classe concrète sous-jacente par n'importe quelle classe qui fournit l'interface Queue
, sans avoir à changer trop de code.
La base des changements sont à changer le type de fifo
pour un Queue
et utiliser remove()
au lieu de removeFirst()
, ce dernier n'étant pas disponible pour l' Queue
interface.
Appel isEmpty()
est toujours correct puisque cela appartient à l'interface Collection
dont Queue
est un dérivé.
Essayez ArrayDeque
ou LinkedList
, qui implémentent tous deux l'interface Queue
.
Http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html
Les Files d'attente sont des structures First In First Out. Vous demandez est assez vague, mais je devine que vous avez seulement besoin de la fonctionnalité de base qui sort habituellement avec des structures de file d'attente. Vous pouvez jeter un oeil à la façon dont vous pouvez l'implémenter ici .
En ce qui concerne votre paquet manquant, c'est probablement parce que vous devrez soit télécharger ou créer le paquet vous-même en suivant ce tutoriel.
Vous n'avez pas besoin d'implémenter votre propre file D'attente FIFO, il suffit de regarder l'interface java.util.File d'attente et ses implémentations
Si vous voulez avoir un tuyau pour écrire/lire des données, vous pouvez utiliser le http://docs.oracle.com/javase/6/docs/api/java/io/PipedWriter.html
Vous pouvez utiliser LinkedBlockingQueue je l'utilise dans mes projets. Il fait partie de java standard et assez Facile à utiliser