数组队列 ArrayQueue

package datastructures.queue;

/**
 * @author warriorg
 */
public class ArrayQueue<T> implements Queue<T> {
    private final Object[] items;
    private int takeIndex;
    private int putIndex;
    private int count;


    public ArrayQueue(int capacity) {
        this.items = new Object[capacity];
        this.takeIndex = 0;
        this.putIndex = 0;
    }

    private void enqueue(T item) {
        items[putIndex] = item;
        if (++putIndex == items.length) {
            putIndex = 0;
        }
        count++;
    }

    private T dequeue() {
        T t = (T) items[takeIndex];
        items[takeIndex] = null;
        if (++takeIndex == items.length) {
            takeIndex = 0;
        }
        count--;
        return t;
    }

    @Override
    public boolean offer(T elem) {
        if (isFull()) {
            return false;
        } 

        enqueue(elem);
        return true;
    }

    @Override
    public T poll() {
        if (isEmpty()) {
            return null;
        }
        return dequeue();
    }

    @Override
    public T peek() {
       return (T)items[takeIndex];
    }

    @Override
    public boolean isEmpty() {
        return count == 0;
    }

    @Override
    public int size() {
        return count;
    }

    public boolean isFull() {
        return count == items.length;
    }

    public static void main(String[] args) {
        ArrayQueue<Integer> queue = new ArrayQueue<>(4);
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);     
        System.out.println("size: " + queue.size());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
    }
}
原文地址:https://www.cnblogs.com/warrior/p/13353383.html