Класс FIFO в Java
Я хочу реализовать FIFO через класс в Java.
такой класс уже существует? Если нет, то как я могу реализовать свой собственный?
Примечание
Я нашел класс здесь http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html, но он не содержит dmg.утиль.*. Я даже не знаю, существует ли такой пакет.
6 ответов
вы ищете любой класс, который реализует очереди интерфейс, кроме PriorityQueue
и PriorityBlockingQueue
, которые не используют алгоритм FIFO.
вероятно, a LinkedList используя add
(добавляет один в конец) и removeFirst
(удаляет один из передней и возвращает его) является самым простым в использовании.
например, вот программа, которая использует LinkedList для очереди и извлечения цифр ПИ:
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
производная.
попробовать ArrayDeque
или LinkedList
, которые как реализовать Queue
интерфейс.
http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html
очередиs являются первыми в первых структурах. Ваш запрос довольно расплывчатый, но я предполагаю, что вам нужна только базовая функциональность, которая обычно выходит со структурами очередей. Вы можете взглянуть на то, как вы можете его реализовать здесь.
Что касается вашего отсутствующего пакета, скорее всего, потому, что вам нужно будет либо загрузить, либо создать пакет самостоятельно, следуя этому руководству.
вам не нужно реализовывать собственную очередь FIFO, просто посмотрите на интерфейс java.утиль.Очередь и его реализации
Если вы хотите иметь канал для записи / чтения данных, вы можете использоватьhttp://docs.oracle.com/javase/6/docs/api/java/io/PipedWriter.html
можно использовать LinkedBlockingQueue Я использую его в своих проектах. Это часть стандартной java и довольно прост в использовании