队列:
队列是只允许在一端插入数据操作,在另一端进行删除数据操作的一种特殊的线性表;插入操作是在队尾插入,而删除数据是在队头进行出队删除操作。
队列Queue接口的定义
public interface Queue<E> {
//获取队列的元素个数
public int getSize();
//判断队列是否为空
public boolean isEmpty();
//清空队列
public void clear();
/**
* 入队一个元素e
* @param e
*/
public void enqueue(E e);
/**
* 出队一个元素e
* @return
*/
public E dequeue();
/**
* 获取队头元素
* @return 返回队头元素
*/
public E getFront();
/**
* 获取队尾元素
* @return 返回队尾元素
*/
public E getRear();
}
ArrayQueue类对Queue接口的实现
public class ArrayQueue<E> implements Queue<E> {
//创建一个线性表
private ArrayList<E> list;
public ArrayQueue() {
list = new ArrayList<E>();
}
/**
* 对线性表的容量进行初始化
* @param capacity 初始化的容量大小
*/
public ArrayQueue(int capacity) {
list = new ArrayList<E>(capacity);
}
/**
* 获取当前队列的元素个数
*/
@Override
public int getSize() {
return list.getSize();
}
/**
* 判断当前队列是否为空
*/
@Override
public boolean isEmpty() {
return list.isEmpty();
}
/**
* 清空队列
*/
@Override
public void clear() {
list.clear();
}
/**
* 入队操作,添加元素e到队列
*/
@Override
public void enqueue(E e) {
list.addLast(e);
}
/**
* 出队操作,移除元素e
*/
@Override
public E dequeue() {
return list.removeFirst();
}
/**
* 获取队头元素
*/
@Override
public E getFront() {
return list.getFirst();
}
/**
* 获取队尾元素
*/
@Override
public E getRear() {
return list.getLast();
}
/**
* 对toString方法进行重写
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("ArrayQueue: size=" + getSize() + ",capacity=" + list.getCapacity()+"\n");
if(isEmpty()){
sb.append("[]");
} else {
sb.append('[');
for(int i = 0; i < list.getSize(); i++) {
sb.append(list.get(i));
if(i == list.getSize() - 1) {
sb.append(']');
} else {
sb.append(',');
}
}
}
return sb.toString();
}
//对equals方法进行重写
@Override
public boolean equals(Object obj) {
if(obj == null) {
return false;
}
if(obj == this) {
return true;
}
//判断obj是否属于ArrayQueue
if(obj instanceof ArrayQueue) {
ArrayQueue queue = (ArrayQueue)obj;
if(list.getSize() == queue.list.getSize()) {
for(int i = 0; i < list.getSize(); i++) {
if(list.get(i) != queue.list.get(i)) {
return false;
}
}
return true;
}
}
return false;
}
}