队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除(remove或poll)操作,而在表的后端(rear)进行插入(add或offer)操作。
可以类比生活中的排队。入队列的时候要排到队伍的最后面(队尾),最前面的人(队头)先出列。先入先出,懂礼貌的大中国人,最有体验,队伍中前面的人肯定来的早,最先排队的,最先出队。早排队早出队办其他事儿。
通过上面描述可知,增删查三个操作,只有增加是队尾操作,删除和查询都是队头操作。队尾的肯定是新数据或者刚到的数据,队头是老数据或者阻塞等待长的数据。
/**
*继承集合接口,所以Queue包含Collection的方法
*/
public interface Queue<E> extends Collection<E> {
/**
* 添加一个元素到队尾
* 添加成功返回true。失败抛出异常。
*/
boolean add(E e);
/**
* 添加一个元素到队尾
* 添加成功返回true。失败返回false。
*/
boolean offer(E e);
/**
* 返回队头的元素,并从队列中移除
* 如果队列为空,抛出异常
*/
E remove();
/**
* 返回队头的元素,并从队列中移除
* 如果队列为空,返回null
*/
E poll();
/**
* 获取队头的元素,但不从队列中移除
* 如果队列为空,抛出异常
*/
E element();
/**
* 获取队头的元素,但不从队列中移除
* 如果队列为空,返回null
*/
E peek();
}