FIFO class in Java
I want to implement FIFO through a class in Java.
Does such a class already exist? If not, how can I implement my own?
NOTE
I found a class here http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html, but it doesn't contain dmg.util.*. I don't know if such a package even exists.
Solution 1:
You're looking for any class that implements the Queue interface, excluding PriorityQueue
and PriorityBlockingQueue
, which do not use a FIFO algorithm.
Probably a LinkedList using add
(adds one to the end) and removeFirst
(removes one from the front and returns it) is the easiest one to use.
For example, here's a program that uses a LinkedList to queue and retrieve the digits of 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();
}
}
Alternatively, if you know you only want to treat it as a queue (without the extra features of a linked list), you can just use the Queue
interface itself:
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();
}
}
This has the advantage of allowing you to replace the underlying concrete class with any class that provides the Queue
interface, without having to change the code too much.
The basic changes are to change the type of fifo
to a Queue
and to use remove()
instead of removeFirst()
, the latter being unavailable for the Queue
interface.
Calling isEmpty()
is still okay since that belongs to the Collection
interface of which Queue
is a derivative.
Solution 2:
Try ArrayDeque
or LinkedList
, which both implement the Queue
interface.
http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html
Solution 3:
Queues are First In First Out structures. You request is pretty vague, but I am guessing that you need only the basic functionality which usually comes out with Queue structures. You can take a look at how you can implement it here.
With regards to your missing package, it is most likely because you will need to either download or create the package yourself by following that tutorial.