队列是一种先进先出,后进后出的特点,是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表
进行删除操作的一端为队头,另一端插入操作的为队尾
队列术语:
队列的使用是通过 Queue 来实现, Queue是个接口,底层是通过链表实现的
Queue包含的方法有:
方法名称 | 功能描述 |
---|---|
add(E) |
入队列 |
boolean offer(E e) |
入队列(offer 在容量受限制的情况下,不会抛异常) |
E remove() |
出队列,并返回队头元素,出队失败引发异常 |
E poll() |
出队列,并返回队头元素 |
E element() |
获取队头元素,获取失败引发异常 |
peek() |
获取队头元素 |
intsize() |
获取队列中有效元素个数 |
boolean isEmpty() |
检测队列是否为空 |
add
方法与offer
方法的区别:
两者都是在队列队头或队尾插入元素,前者(add)插入元素失败会引发异常,后者(offer)插入元素失败不会引发异常,只会以返回false的形式表示插入元素失败
remove
方法与poll
方法的区别:
remove
方法与poll
方法都是在队头或队尾删除并返回元素,前者(remove)删除元素失败会引发异常,后者(poll)删除元素失败不会引发异常,只会以返回null的形式表示删除元素失败
element
方法与peek
方法的区别:
两者都是在队列队头或队尾获取并返回元素,前者(get)获取元素失败会引发异常,后者(peek)获取元素失败不会引发异常,只会以返回null的形式表示获取元素失败
总结:
在有容量限制的情况下,使用 add(入队列)、remove(出队列)、element()(获取队头元素)
方法失败会引发异常
而使用 offer(入队列)、poll(出队列)、peek获取队头元素)
方法不会
示范:
注意:Queue是个接口,在实例化时必须实例化LinkedList的对象
因为LinkedList实现了Queue接口
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);// 入列
queue.offer(2);
queue.offer(3);
queue.