摘要:知識點總結容器知識點總結容器接口與是在同一級別,都是繼承了接口。另一種隊列則是雙端隊列,支持在頭尾兩端插入和移除元素,主要包括。一個由鏈表結構組成的無界阻塞隊列。是一個阻塞的線程安全的隊列,底層實現也是使用鏈式結構。
Java知識點總結(Java容器-Queue)
@(Java知識點總結)[Java, Java容器]
QueueQueue接口與List、Set是在同一級別,都是繼承了Collection接口。LinkedList接口實現了Queue接口。Queue接口收縮了對LinkedList的方法訪問權限(也就是方法參數如果是Queue,那就只能方法Queue接口定義的方法),讓方法能夠正確的使用。
隊列隊列是一種數據結構,它有兩個基本操作:在隊列尾部添加一個元素,和在隊列頭部移除一個元素。也就是說,隊列以一種先進先出(FIFO)的方式操作數據。
隊列,它主要分為兩大類,一類是阻塞式隊列,隊列滿了以后再插入元素則會拋出異常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。另一種隊列則是雙端隊列,支持在頭、尾兩端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。
方法 | 功能 | 異常處理 |
---|---|---|
add | 增加一個元索 | 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常 |
remove | 移除并返回隊列頭部的元素 | 如果隊列為空,則拋出一個NoSuchElementException異常 |
element | 返回隊列頭部的元素 | 如果隊列為空,則拋出一個NoSuchElementException異常 |
offer | 添加一個元素并返回true | 如果隊列已滿,則返回false |
poll | 移除并返問隊列頭部的元素 | 如果隊列為空,則返回null |
peek | 返回隊列頭部的元素 | 如果隊列為空,則返回null |
put | 添加一個元素 | 如果隊列滿,則阻塞 |
take | 移除并返回隊列頭部的元素 | 如果隊列為空,則阻塞 |
拋出異常:是指當阻塞隊列滿時候,再往隊列里插入元素,會拋出IllegalStateException(“Queue full”)異常。當隊列為空時,從隊列里獲取元素時會拋出NoSuchElementException異常 。
返回特殊值:插入方法會返回是否成功,成功則返回true。移除方法,則是從隊列里拿出一個元素,如果沒有則返回null
一直阻塞:當阻塞隊列滿時,如果生產者線程往隊列里put元素,隊列會一直阻塞生產者線程,直到拿到數據,或者響應* 中斷退出。當隊列空時,消費者線程試圖從隊列里take元素,隊列也會阻塞消費者線程,直到隊列可用。
超時退出:當阻塞隊列滿時,隊列會阻塞生產者線程一段時間,如果超過一定的時間,生產者線程就會退出。
阻塞隊列ArrayBlockingQueue :一個由數組結構組成的有界阻塞隊列。
LinkedBlockingQueue :一個由鏈表結構組成的有界阻塞隊列。
PriorityBlockingQueue :一個支持優先級排序的無界阻塞隊列。
DelayQueue:一個使用優先級隊列實現的無界阻塞隊列。
SynchronousQueue:一個不存儲元素的阻塞隊列。
LinkedTransferQueue:一個由鏈表結構組成的無界阻塞隊列。
LinkedBlockingDeque:一個由鏈表結構組成的雙向阻塞隊列。
ConcurrentLinkedQueue :基于鏈接節點的無界線程安全隊列
Queue的使用/** * 隊列測試:實現類使用LinkedList * * Queue也有很多其他的實現類,比如java.util.concurrent.LinkedBlockingQueue。 * LinkedBlockingQueue是一個阻塞的線程安全的隊列,底層實現也是使用鏈式結構。 */ public class TestQuene { // 定義一個隊列 Queuequeue; @Before public void before() { // 實例化隊列變量 queue = new LinkedList (); // add方法向隊列中添加元素,返回布爾值,add方法添加失敗時會拋異常,不推薦使用 // queue.add("1"); // queue.add("2"); // queue.add("3"); // queue.add("4"); // queue.add("5"); // offer方法向隊列中添加元素,返回布爾值 queue.offer("a"); queue.offer("b"); queue.offer("c"); queue.offer("d"); queue.offer("e"); } // poll方法移除隊列首個元素并返回,若隊列為空,返回null @Test public void test1() { // 彈出元素 String pollEle = queue.poll(); // 先進先出,彈出了a System.out.println(pollEle); // a System.out.println(queue); // [b, c, d, e] } // remove方法移除首個元素并返回,若隊列為空,會拋出異常:NoSuchElementException,不推薦使用 @Test public void test2() { // 彈出元素 String remove = queue.remove(); // 先進先出,彈出了a System.out.println(remove); // a System.out.println(queue); // [b, c, d, e] } // peek方法返回隊列首個元素,但不移除,若隊列為空,返回null @Test public void test3() { // 查看首個元素 String peek = queue.peek(); // 首個元素是a,最先加入 System.out.println(peek); // a System.out.println(queue); // [a, b, c, d, e] } // element方法返回隊列的頭元素,但不移除,若隊列為空,會拋出異常:NoSuchElementException,不推薦使用 @Test public void test4() { // 查看首個元素 String element = queue.element(); System.out.println(element); // a System.out.println(queue); // [a, b, c, d, e] } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71420.html
摘要:底層使用的是雙向鏈表數據結構之前為循環鏈表,取消了循環。快速隨機訪問就是通過元素的序號快速獲取元素對象對應于方法。而接口就是用來標識該類支持快速隨機訪問。僅僅是起標識作用。,中文名為雙端隊列。不同的是,是線程安全的,內部使用了進行同步。 前言 學習情況記錄 時間:week 2 SMART子目標 :Java 容器 記錄在學習Java容器 知識點中,關于List的需要重點記錄的知識點。...
摘要:線程安全的線程安全的,在讀多寫少的場合性能非常好,遠遠好于高效的并發隊列,使用鏈表實現。這樣帶來的好處是在高并發的情況下,你會需要一個全局鎖來保證整個平衡樹的線程安全。 該文已加入開源項目:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目,Star 數接近 14 k)。地址:https://github.com/Snailclimb... 一 JDK ...
摘要:說到復盤基礎,并不是所有的都會復盤,沒那個時間更沒那個必要。比如,一些基礎的語法以及條件語句,極度簡單。思前想后,我覺得整個計劃應該從集合開始,而復盤的方式就是讀源碼。通常,隊列不允許隨機訪問隊列中的元素。 ?showImg(https://segmentfault.com/img/remote/1460000020029737?w=1080&h=711); 老讀者都知道,我是自學轉行...
摘要:同步容器及其注意事項中的容器主要可以分為四個大類,分別是和,但并不是所有的容器都是線程安全的。并發容器及其注意事項在版本之前所謂的線程安全的容器,主要指的就是同步容器,當然因為所有方法都用來保證互斥,串行度太高了,性能太差了。 Java 并發包有很大一部分內容都是關于并發容器的,因此學習和搞懂這部分的內容很有必要。 Java 1.5 之前提供的同步容器雖然也能保證線程安全,但是性能很差...
摘要:本文主要講述消息服務在中的使用。所以需要一個監聽容器工廠的概念,即接口,它會引用上面創建好的與的連接工廠,由它來負責接收消息以及將消息分發給指定的監聽器。為了消費消息,訂閱者必須保持運行的狀態。 JMS 在 SpringBoot 中的使用 摘要:本文屬于原創,歡迎轉載,轉載請保留出處:https://github.com/jasonGeng88/blog> 本文所有服務均采用doc...
閱讀 3022·2021-11-16 11:42
閱讀 3675·2021-09-08 09:36
閱讀 956·2019-08-30 12:52
閱讀 2490·2019-08-29 14:12
閱讀 780·2019-08-29 13:53
閱讀 3592·2019-08-29 12:16
閱讀 649·2019-08-29 12:12
閱讀 2478·2019-08-29 11:16