理解:
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。
假设下面是一个队列:
队尾 ---->[1,2,3,4,5]---> 队头
数据从队尾进,从队头出。即先进先出原则。
java5 中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
注意:
1.Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。
2.如果要使用前端而不移出该元素,使用element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
应用场景:
多线程中应用
基本用法
使用起来跟list这些集合没有什么区别
public class QueueTest {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.offer("a"); //添加元素
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for (String q : queue) {
System.out.println(q);
}
System.out.println("poll=" + queue.poll()); //移除第一个元素
for (String q : queue) {
System.out.println(q);
}
System.out.println("peek=" + queue.peek()); // 返回第一个元素
for (String q : queue) {
System.out.println(q);
}
}
}