// A class that uses an object of the ArrayList class to implement Queue.
// Barry Cornelius, 30th January 1999
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Observer;
import java.util.Observable;

public class ArrayQueue extends Observable implements Queue 
{
   private List iList = null;
   public ArrayQueue()
   {
      iList = new ArrayList();
      setChanged();
      notifyObservers();
      
   }
   public void add(Object pObject) 
   {
      iList.add(pObject);
      setChanged();
      notifyObservers();
      
   }
   public Object getFirst()
   {
      return iList.get(0);
   }
   public Object remove() 
   {
       Object pObject = iList.remove(0);
       setChanged();
       notifyObservers();
       return pObject;
      
   }
   public boolean isEmpty()
   {
      return iList.size()==0;
   }
   public boolean equals(Object pObject)
   {
      if ( ! (pObject instanceof ArrayQueue) )
      {
         return false;
      }
      return iList.equals(((ArrayQueue)pObject).iList);
   }
   public String toString()
   {
      if (iList.size()==0)
      {
         return new String("");
      }
      else
      {
         StringBuffer tStringBuffer = new StringBuffer();
         final Iterator tIterator = iList.iterator();
         while (tIterator.hasNext())
         {
            Object tObject = tIterator.next();
            tStringBuffer.append("@" + tObject.toString());
         }
         return tStringBuffer.toString().substring(1);
      }
   }

    public void addObserver(Observer pObserver)
        {
            super.addObserver(pObserver);
            
        }
    
}

