package com.coding.basic; import java.util.NoSuchElementException; /** * Created by songbao.yang on 2017/2/22. * */ public class Queue { private Object[] elementData; private int head; //对头的位置 private int tail; //队尾的位置 private int size; //队列中元素的个数 private static final int MIN_INITIAL_CAPACITY = 10; public Queue() { this.elementData = new Object[MIN_INITIAL_CAPACITY]; this.head = 0; this.tail = 0; this.size = 0; } public Queue(int initCapcacity) { if (initCapcacity < MIN_INITIAL_CAPACITY){ initCapcacity = MIN_INITIAL_CAPACITY; } this.elementData = new Object[initCapcacity]; this.head = 0; this.tail = 0; this.size = 0; } public void enQueue(Object o){ ensureCapacity(size+1); if(size != 0){ tail++; } if(tail == elementData.length){ tail = 0; } elementData[tail] = o; size++; } private void ensureCapacity(int minCapcacity){ if(minCapcacity <= elementData.length){ return; } int newCapcacity = elementData.length << 1; if (newCapcacity < elementData.length){ newCapcacity = Integer.MAX_VALUE; } Object[] newData = new Object[newCapcacity]; if(size != 0){ if(tail >= head){ System.arraycopy(elementData, head, newData, 0, size); } else { System.arraycopy(elementData, head, newData, 0, elementData.length - head); System.arraycopy(elementData, 0, newData, elementData.length - head, tail + 1); } elementData = newData; head = 0; tail = this.size - 1; } } public Object deQueue(){ if (isEmpty()){ throw new NoSuchElementException("empty queue"); } Object ele = elementData[head]; size--; head++; if(head == elementData.length){ head = 0; } return ele; } public boolean isEmpty(){ return size == 0; } public int size(){ return size; } }