ArrayQueue
Posted sleepingdogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayQueue相关的知识,希望对你有一定的参考价值。
Queue定义,直接copyJava的Queue,去除了Collection接口。
public interface Queue<E>
/**
* Inserts the specified element into this queue if it is possible to do so
* immediately without violating capacity restrictions, returning
* @code true upon success and throwing an @code IllegalStateException
* if no space is currently available.
*
* @param e the element to add
* @return @code true (as specified by
* @throws IllegalStateException if the element cannot be added at this
* time due to capacity restrictions
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this queue
* @throws NullPointerException if the specified element is null and
* this queue does not permit null elements
* @throws IllegalArgumentException if some property of this element
* prevents it from being added to this queue
*/
boolean add(E e);
/**
* Inserts the specified element into this queue if it is possible to do
* so immediately without violating capacity restrictions.
* When using a capacity-restricted queue, this method is generally
* preferable to @link #add, which can fail to insert an element only
* by throwing an exception.
*
* @param e the element to add
* @return @code true if the element was added to this queue, else
* @code false
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this queue
* @throws NullPointerException if the specified element is null and
* this queue does not permit null elements
* @throws IllegalArgumentException if some property of this element
* prevents it from being added to this queue
*/
boolean offer(E e);
/**
* Retrieves and removes the head of this queue. This method differs
* from @link #poll poll only in that it throws an exception if this
* queue is empty.
*
* @return the head of this queue
* @throws NoSuchElementException if this queue is empty
*/
E remove();
/**
* Retrieves and removes the head of this queue,
* or returns @code null if this queue is empty.
*
* @return the head of this queue, or @code null if this queue is empty
*/
E poll();
/**
* Retrieves, but does not remove, the head of this queue. This method
* differs from @link #peek peek only in that it throws an exception
* if this queue is empty.
*
* @return the head of this queue
* @throws NoSuchElementException if this queue is empty
*/
E element();
/**
* Retrieves, but does not remove, the head of this queue,
* or returns @code null if this queue is empty.
*
* @return the head of this queue, or @code null if this queue is empty
*/
E peek();
ArrayQueue
public class ArrayQueue implements Queue
// 数组
int[] array;
//最大值
int maxSize;
// 前
int front;
// 后
int rear;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
public ArrayQueue(int maxSize)
this.front = -1;
this.rear = -1;
this.array = new int[maxSize];
this.maxSize = maxSize;
@Override
public boolean add(Object value)
reset();
if (isFull())
throw new IllegalArgumentException("queue if full, can not add!");
addDirectly(value);
return true;
@Override
public boolean offer(Object value)
reset();
if (isFull())
System.out.println("queue if full, can not offer!");
return false;
addDirectly(value);
return true;
@Override
public Object remove()
if (isEmpty())
throw new NoSuchElementException("queue if empty!");
return getDirectly();
@Override
public Object poll()
if (isEmpty())
return null;
return getDirectly();
@Override
public Object element()
if (isEmpty())
throw new NoSuchElementException("queue if empty!");
return array[front + 1];
@Override
public Object peek()
if (isEmpty())
return null;
return array[front + 1];
private boolean isEmpty()
return rear == front;
private void addDirectly(Object value)
this.array[++rear] = (int) value;
private int getDirectly()
++front;
int value = array[front];
array[front] = 0;
return value;
private boolean isFull()
if (this.rear == maxSize -1)
return true;
return false;
/**
* 重置队列,希望可以有多余的空间
*/
private void reset()
if (rear + 1 > maxSize * DEFAULT_LOAD_FACTOR)
if (front != -1)
int index = -1;
int[] temp = new int[maxSize];
for (int i = front + 1; i <= rear; i++)
temp[++index] = this.array[i];
this.array = temp;
this.rear = this.rear - front - 1;
this.front = -1;
public static void main(String[] args) throws Exception
ArrayQueue queue = new ArrayQueue(2);
Scanner scanner = new Scanner(System.in);
while(true)
System.out.println("o(offer)");
System.out.println("p(poll)");
char cmd = scanner.next().charAt(0);
switch (cmd)
case ‘o‘ :
System.out.println("请输入值需要添加的值....");
int value = scanner.nextInt();
queue.offer(value);
System.out.println(String.format("queue is : %s", Arrays.toString(queue.array)));
break;
case ‘p‘ :
System.out.println(String.format("value is : %s", queue.poll()));
System.out.println(String.format("queue is : %s", Arrays.toString(queue.array)));
break;
default:
System.out.println("未知的命令" + cmd);
break;
以上是关于ArrayQueue的主要内容,如果未能解决你的问题,请参考以下文章