web-dev-qa-db-fra.com

FIFO classe en Java

Je souhaite implémenter FIFO via une classe en Java.

Une telle classe existe-t-elle déjà? Si non, comment puis-je mettre en œuvre le mien?

REMARQUE

J'ai trouvé un cours ici http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html , mais il ne contient pas dmg.util. *. Je ne sais pas si un tel paquet existe même.

53
Rog Matthews

Vous recherchez une classe qui implémente l'interface File d'attente , à l'exception de PriorityQueue et PriorityBlockingQueue, qui n'utilisent pas d'algorithme FIFO.

Probablement a LinkedList using add (en ajoute un à la fin) et removeFirst (en supprime un du premier plan et le renvoie) est le plus simple à 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();
    }
} 

Sinon, si vous savez vous voulez seulement le traiter 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 présente l'avantage de vous permettre de remplacer la classe concrète sous-jacente par n'importe quelle classe fournissant l'interface Queue, sans avoir à trop modifier le code.

Les modifications de base consistent à changer le type de fifo en Queue et à utiliser remove() au lieu de removeFirst(), ce dernier n'étant pas disponible pour l'interface Queue.

L'appel de isEmpty() est toujours correct puisqu'il appartient à l'interface Collection dont Queue est un dérivé.

108
paxdiablo

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

http://docs.Oracle.com/javase/6/docs/api/Java/util/ArrayDeque.html

16
Rusty

Les files d'attente s sont des structures First In First Out. Votre demande est assez vague, mais je suppose que vous n’avez besoin que des fonctionnalités de base, qui sont généralement fournies avec les structures de file d’attente. Vous pouvez regarder comment vous pouvez le mettre en œuvre ici .

En ce qui concerne votre paquet manquant, il est fort probable que vous deviez soit le télécharger, soit le créer vous-même en suivant ce tutoriel.

2
npinti

Vous n'avez pas à implémenter votre propre file d'attente FIFO, il suffit de regarder l'interface Java.util.Queue et ses implémentations

1
ftr

si vous voulez 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
Hachi

Vous pouvez utiliser LinkedBlockingQueue Je l'utilise dans mes projets. Cela fait partie de Java standard et tout à fait facile à utiliser

0
kalgecin