理解:
隊列是一種特殊的線性表善已,它只允許在表的前端(front)進(jìn)行刪除操作灼捂,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊尾换团,進(jìn)行刪除操作的端稱為隊頭悉稠。隊列中沒有元素時,稱為空隊列艘包。
Queue接口與List的猛、Set同一級別,都是繼承了Collection接口想虎。LinkedList實現(xiàn)了Deque接 口卦尊。
假設(shè)下面是一個隊列:
隊尾 ---->[1,2,3,4,5]---> 隊頭
數(shù)據(jù)從隊尾進(jìn),從隊頭出舌厨。即先進(jìn)先出原則岂却。
java5 中新增加了java.util.Queue接口,用以支持隊列的常見操作。該接口擴(kuò)展了java.util.Collection接口躏哩。
注意:
1.Queue使用時要盡量避免Collection的add()和remove()方法署浩,而是要使用offer()來加入元素,使用poll()來獲取并移出元素扫尺。它們的優(yōu)點是通過返回值可以判斷成功與否筋栋,add()和remove()方法在失敗的時候會拋出異常。
2.如果要使用前端而不移出該元素器联,使用element()或者peek()方法二汛。
值得注意的是LinkedList類實現(xiàn)了Queue接口,因此我們可以把LinkedList當(dāng)成Queue來用拨拓。
應(yīng)用場景:
多線程中應(yīng)用
基本用法
使用起來跟list這些集合沒有什么區(qū)別
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);
}
}
}