    01: import java.util.ArrayList;
    02:
    03: /**
    04:    A first-in, first-out bounded collection of messages.
    05: */
    06: public class MessageQueue
    07: {
    08:    /**
    09:       Constructs an empty message queue.
    10:    */
    11:    public MessageQueue()
    12:    {
    13:       queue = new ArrayList<Message>();
    14:    }
    15:
    16:    /**
    17:       Remove message at head.
    18:       @return message that has been removed from the queue
    19:    */
    20:    public Message remove()
    21:    {
    22:       if (!queue.isEmpty())
    23:          return queue.remove(0);
    24:       else
    25:          throw new IllegalStateException("Queue is empty");
    26:    }
    27:
    28:    /**
    29:       Append message at tail.
    30:       @param newMessage the message to be appended
    31:    */
    32:    public void add(Message newMessage)
    33:    {
    34:       queue.add(newMessage);
    35:    }
    36:
    37:    /**
    38:       Get the total number of messages in the queue.
    39:       @return the total number of messages in the queue
    40:    */
    41:    public int getLength()
    42:    {
    43:       return queue.size();
    44:    }
    45:
    46:    /**
    47:       Get message at head.
    48:       @return message that is at the head of the queue
    49:    */
    50:    public Message getHead()
    51:    {
    52:       if (!queue.isEmpty())
    53:          return queue.get(0);
    54:       else
    55:          throw new IllegalStateException("Queue is empty");
    56:    }
    57:
    58:    private ArrayList<Message> queue;
    59: }