A generic first-in, first-out bounded collection of objects : Generic Collections « Generics « Java Tutorial






import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class QueueTester {
  public static void main(String[] args) {
    BoundedQueue<String> q = new BoundedQueue<String>(10);

    q.add("A");
    q.add("B");
    q.add("C");
    q.remove();
    q.add("D");

    ArrayList<String> a = new ArrayList<String>();
    a.addAll(q);
    System.out.println("Result of bulk add: " + a);
    System.out.println("Minimum: " + Collections.min(q));
  }
}

/**
 * A first-in, first-out bounded collection of objects.
 */
class BoundedQueue<E> extends AbstractCollection<E> {
  private Object[] elements;
  private int head;
  private int tail;
  private int count;

  public BoundedQueue(int capacity) {
    elements = new Object[capacity];
    count = 0;
    head = 0;
    tail = 0;
  }

  public Iterator<E> iterator() {
    return new Iterator<E>() {
      public boolean hasNext() {
        return visited < count;
      }

      public E next() {
        int index = (head + visited) % elements.length;
        E r = (E) elements[index];
        visited++;
        return r;
      }

      public void remove() {
        throw new UnsupportedOperationException();
      }

      private int visited = 0;
    };
  }

  /**
   * Remove object at head.
   * 
   * @return the object that has been removed from the queue
   * @precondition size() > 0
   */
  public E remove() {
    E r = (E) elements[head];
    head = (head + 1) % elements.length;
    count--;
    return r;
  }

  /**
   * Append an object at tail.
   * 
   * @param anObject
   *            the object to be appended
   * @return true since this operation modifies the queue. (This is a
   *         requirement of the collections framework.)
   * @precondition !isFull()
   */
  public boolean add(E anObject) {
    elements[tail] = anObject;
    tail = (tail + 1) % elements.length;
    count++;
    return true;
  }

  public int size() {
    return count;
  }

  /**
   * Checks whether this queue is full.
   * 
   * @return true if the queue is full
   */
  public boolean isFull() {
    return count == elements.length;
  }

  /**
   * Gets object at head.
   * 
   * @return the object that is at the head of the queue
   * @precondition size() > 0
   */
  public E peek() {
    return (E) elements[head];
  }

}








12.2.Generic Collections
12.2.1.Generics and Collections: ArrayList
12.2.2.Arrays: Storing class objects in Array as data items
12.2.3.Using Generic Comparable interface
12.2.4.A generic first-in, first-out bounded collection of objects
12.2.5.A list declared to hold objects of a type T can also hold objects that extend from T.
12.2.6.Utilities for generic ArrayList
12.2.7.Your own tree with generic user object
12.2.8.Generic to list
12.2.9.Create a typesafe copy of a raw list.
12.2.10.Create a typesafe copy of a raw map.
12.2.11.Create a typesafe filter of an unchecked iterator.
12.2.12.Create a typesafe view over an underlying raw set.
12.2.13.Create a typesafe view over an underlying raw map.
12.2.14.Create a typesafe filter of an unchecked enumeration.