Класс FIFO в Java

Я хочу реализовать FIFO через класс в Java.

Есть ли такой класс уже существует? Если нет, как я могу реализовать свои собственные?

Примечание

Я нашел класс здесь http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html, но он не содержит dmg.util. *. Я не знаю, существует ли такой пакет.

Ответ 1

Вы ищете любой класс, который реализует интерфейс очереди, исключая PriorityQueue и PriorityBlockingQueue, которые не используют FIFO алгоритм.

Вероятно, LinkedList, используя add (добавляет один к концу) и removeFirst (удаляет один из фронта и возвращает он) является самым простым в использовании.

Например, здесь программа, которая использует LinkedList для очереди и получения цифр 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();
    }
} 

В качестве альтернативы, если вы знаете, что хотите обрабатывать его только как очередь (без дополнительных функций связанного списка), вы можете просто использовать интерфейс 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();
    }
}

Это имеет преимущество, позволяя вам заменить базовый конкретный класс любым классом, который предоставляет интерфейс Queue, без необходимости слишком сильно изменять код.

Основные изменения - изменить тип fifo на Queue и использовать remove() вместо removeFirst(), последний недоступен для интерфейса Queue.

Вызов isEmpty() все еще в порядке, так как это принадлежит интерфейсу Collection, из которого Queue является производной.

Ответ 3

Queue - это структуры First In First Out. Вы запросите довольно расплывчатый, но я предполагаю, что вам нужны только базовые функции, которые обычно появляются в структурах очереди. Вы можете посмотреть, как вы можете реализовать его здесь.

Что касается вашего недостающего пакета, это, скорее всего, потому, что вам нужно либо загрузить, либо создать пакет самостоятельно, следуя этому учебнику.

Ответ 4

Вам не нужно реализовать свою собственную очередь FIFO, просто посмотрите на интерфейс java.util.Queue и его реализации