通过学习自定义队列,了解队列的数据结构。
首先写一个队列的接口,描述其具有的基本功能。Queue.java
然后写一个接口的实现类,这只是其中一种实现方式,为数组队列。ArrayQueue.java
最后写一个测试类,测试自定义数组队列的效果。Test.java
整个栈的实现,借助了 自定义数组 这篇文章的类。Array.java
结构:
Queue.java:
package Queue;
public interface Queue<E> {
/**
* 获取队列中数据的大小
* @return
*/
int getSize();
/**
* 判断队列是否为空
* @return
*/
boolean isEmpty();
/**
* 在队尾插入元素
* @param e
*/
void enqueue(E e);
/**
* 在队头删除元素
* @return
*/
E dequeue();
/**
* 查看队头元素
* @return
*/
E getFront();
}
ArrayQueue.java:
package Queue;
public class ArrayQueue<E> implements Queue<E> {
private Array<E> array;//底层维护自定义Array数组
/**
* 带参构造函数,自定义初始容量
* @param capacity
*/
public ArrayQueue(int capacity) {
array=new Array<E>(capacity);
}
/**
* 无参构造函数,初始容量为10
*/
public ArrayQueue() {
array=new Array<E>();
}
/**
* 返回队列的大小
*/
@Override
public int getSize() {
return array.getSize();
}
/**
* 判断队列是否为空
*/
@Override
public boolean isEmpty() {
return array.isEmpty();
}
/**
* 插入队尾
*/
@Override
public void enqueue(E e) {
array.addLast(e);
}
/**
* 取出队头
*/
@Override
public E dequeue() {
return array.removeFirst();
}
/**
* 查看队头
*/
@Override
public E getFront() {
return array.get(0);
}
/**
* 重写Object的toString方法
*/
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("Queue:");
sb.append("front [");
for(int i=0;i<array.getSize();i++) {
sb.append(array.get(i));
if(i!=array.getSize()-1) {
sb.append(",");
}
}
sb.append("] tail");
return sb.toString();
}
}
Test.java:
package Queue;
public class Test {
public static void main(String[] args) {
Queue<Integer> queue=new ArrayQueue<Integer>();
for(int i=0;i<10;i++) {
queue.enqueue(i);
System.out.println(queue);
if(i%3==2) {//每插入3个,则取出队头元素。
queue.dequeue();
System.out.println(queue);
}
}
}
}
控制台打印输出: