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.

53
demandé sur canolucas 2012-03-06 12:50:07

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é.

106
répondu paxdiablo 2014-09-11 18:17:50

Essayez ArrayDeque ou LinkedList, qui implémentent tous deux l'interface Queue.

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

16
répondu Rusty 2012-03-06 08:53:03

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.

2
répondu npinti 2012-03-06 08:53:41

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

1
répondu ftr 2012-03-06 08:54:13

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

1
répondu Hachi 2012-03-06 08:55:51

Vous pouvez utiliser LinkedBlockingQueue je l'utilise dans mes projets. Il fait partie de java standard et assez Facile à utiliser

0
répondu kalgecin 2014-11-25 21:05:49