001 // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org)
002 // The Molly framework is freely distributable under the terms of an
003 // MIT-style license. For details, see the molly pages web site at:
004 // http://www.mollypages.org/. Use, modify, have fun !
005
006 package fc.util;
007
008 import java.util.*;
009 //Obsolete with the intro of jdk 1.5 java.util.Q
010
011 /**
012 A thin wrapper around a java collection that provides queue semantics (FIFO).
013 **/
014 public class Queue extends LinkedList
015 {
016 public Queue() {
017 super();
018 }
019
020 public Queue(Collection c) {
021 super(c);
022 }
023
024 /**
025 Enqueue's the specified object. Behaves as per {@link java.util.Collection#add(Object)}
026 **/
027 public boolean enque(Object obj) {
028 return add(obj);
029 }
030
031 /**
032 Dequeues an object from the beginning of the queue
033
034 @throws NoSuchElementException if this list is empty.
035 **/
036 public Object deque() {
037 return removeFirst();
038 }
039
040 /** Returns <tt>true</tt> is this queue is empty, <tt>false</tt> otherwise**/
041 public boolean empty() {
042 return size() == 0;
043 }
044
045 public static void main(String[] args)
046 {
047 Queue q = new Queue();
048 q.enque("hello");
049 q.enque("world");
050 System.out.println("q="+ q);
051 //DO NOT PUT "n < q.size()" in the loop, because with every deque
052 //the SIZE CHANGES (and the loop won't work properly).
053
054 //method 1: take a snapshot
055 /*
056 int size = q.size(); //<--the snapshot
057 for(int n = 0; n < size; n++) {
058 System.out.println("deque["+n+"]="+q.deque());
059 }
060 */
061
062 //method 2: use empty()
063 while (! q.empty())
064 System.out.println(q.deque());
065
066 System.out.println("This should throw an Exception");
067 q.deque();
068 }
069
070 } //~class Queue