最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA中的隊(duì)列(Queue)詳解

 更新時(shí)間:2023年07月25日 08:49:32   作者:java葉新東老師  
這篇文章主要介紹了JAVA中的隊(duì)列(Queue)詳解,隊(duì)列是一種特殊的線性表,遵循先入先出、后入后出的基本原則,一般來(lái)說(shuō),它只允許在表的前端進(jìn)行刪除操作,需要的朋友可以參考下

什么是隊(duì)列?

隊(duì)列是一種特殊的線性表,遵循先入先出、后入后出的基本原則,一般來(lái)說(shuō),它只允許在表的前端進(jìn)行刪除操作,而在表的后端進(jìn)行插入操作,但是java的某些隊(duì)列運(yùn)行在任何地方插入刪除;比如我們常用的 LinkedList 集合,它實(shí)現(xiàn)了Queue 接口,因此,我們可以理解為L(zhǎng)inkedList 就是一個(gè)隊(duì)列;

java隊(duì)列特性

隊(duì)列主要分為阻塞和非阻塞,有界和無(wú)界、單向鏈表和雙向鏈表之分;

阻塞和非阻塞

阻塞隊(duì)列

入列(添加元素)時(shí),如果元素?cái)?shù)量超過(guò)隊(duì)列總數(shù),會(huì)進(jìn)行等待(阻塞),待隊(duì)列的中的元素出列后,元素?cái)?shù)量未超過(guò)隊(duì)列總數(shù)時(shí),就會(huì)解除阻塞狀態(tài),進(jìn)而可以繼續(xù)入列;

出列(刪除元素)時(shí),如果隊(duì)列為空的情況下,也會(huì)進(jìn)行等待(阻塞),待隊(duì)列有值的時(shí)候即會(huì)解除阻塞狀態(tài),進(jìn)而繼續(xù)出列;

阻塞隊(duì)列的好處是可以防止隊(duì)列容器溢出;只要滿了就會(huì)進(jìn)行阻塞等待;也就不存在溢出的情況;

只要是阻塞隊(duì)列,都是線程安全的;

非阻塞隊(duì)列

不管出列還是入列,都不會(huì)進(jìn)行阻塞,

入列時(shí),如果元素?cái)?shù)量超過(guò)隊(duì)列總數(shù),則會(huì)拋出異常,

出列時(shí),如果隊(duì)列為空,則取出空值;

一般情況下,非阻塞式隊(duì)列使用的比較少,一般都用阻塞式的對(duì)象比較多;阻塞和非阻塞隊(duì)列在使用上的最大區(qū)別就是阻塞隊(duì)列提供了以下2個(gè)方法:

  • 出隊(duì)阻塞方法 : take()
  • 入隊(duì)阻塞方法 : put()

有界和無(wú)界

有界:有界限,大小長(zhǎng)度受限制

無(wú)界:無(wú)限大小,其實(shí)說(shuō)是無(wú)限大小,其實(shí)是有界限的,只不過(guò)超過(guò)界限時(shí)就會(huì)進(jìn)行擴(kuò)容,就行ArrayList 一樣,在內(nèi)部動(dòng)態(tài)擴(kuò)容

單向鏈表和雙向鏈表

單向鏈表 :每個(gè)元素中除了元素本身之外,還存儲(chǔ)一個(gè)指針,這個(gè)指針指向下一個(gè)元素;

雙向鏈表 :除了元素本身之外,還有兩個(gè)指針,一個(gè)指針指向前一個(gè)元素的地址,另一個(gè)指針指向后一個(gè)元素的地址;

java 隊(duì)列接口繼承圖

隊(duì)列常用方法

  • add 增加一個(gè)元索 如果隊(duì)列已滿,則拋出一個(gè)IIIegaISlabEepeplian異常
  • remove 移除并返回隊(duì)列頭部的元素 如果隊(duì)列為空,則拋出一個(gè)NoSuchElementException異常
  • element 返回隊(duì)列頭部的元素 如果隊(duì)列為空,則拋出一個(gè)NoSuchElementException異常
  • offer 添加一個(gè)元素并返回true 如果隊(duì)列已滿,則返回false
  • poll 移除并返問(wèn)隊(duì)列頭部的元素 如果隊(duì)列為空,則返回null
  • peek 返回隊(duì)列頭部的元素 如果隊(duì)列為空,則返回null
  • put 添加一個(gè)元素 如果隊(duì)列滿,則阻塞
  • take 移除并返回隊(duì)列頭部的元素 如果隊(duì)列為空,則阻塞
  • drainTo(list) 一次性取出隊(duì)列所有元素

知識(shí)點(diǎn): remove、element、offer、poll、peek其實(shí)是屬于Queue接口。

非阻塞隊(duì)列

1、ConcurrentLinkedQueue

單向鏈表結(jié)構(gòu)的無(wú)界并發(fā)隊(duì)列, 非阻塞隊(duì)列,由CAS實(shí)現(xiàn)線程安全,內(nèi)部基于節(jié)點(diǎn)實(shí)現(xiàn)

2、ConcurrentLinkedDeque

雙向鏈表結(jié)構(gòu)的無(wú)界并發(fā)隊(duì)列, 非阻塞隊(duì)列,由CAS實(shí)現(xiàn)線程安全

3、PriorityQueue

內(nèi)部基于數(shù)組實(shí)現(xiàn),線程不安全的隊(duì)列

阻塞隊(duì)列

1、DelayQueue

一個(gè)支持延時(shí)獲取元素的無(wú)界阻塞隊(duì)列

2、LinkedTransferQueue

一個(gè)由鏈表結(jié)構(gòu)組成的無(wú)界阻塞隊(duì)列。

3、ArrayBlockingQueue

有界隊(duì)列,阻塞式,初始化時(shí)必須指定隊(duì)列大小,且不可改變;,底層由數(shù)組實(shí)現(xiàn);

4、SynchronousQueue

最多只能存儲(chǔ)一個(gè)元素,每一個(gè)put操作必須等待一個(gè)take操作,否則不能繼續(xù)添加元素

5、PriorityBlockingQueue

一個(gè)帶優(yōu)先級(jí)的隊(duì)列,而不是先進(jìn)先出隊(duì)列。元素按優(yōu)先級(jí)順序被移除,而且它也是無(wú)界的,也就是沒有容量上限,雖然此隊(duì)列邏輯上是無(wú)界的,但是由于資源被耗盡,所以試圖執(zhí)行添加操作可能會(huì)導(dǎo)致 OutOfMemoryError 錯(cuò)誤;

到此這篇關(guān)于JAVA中的隊(duì)列(Queue)詳解的文章就介紹到這了,更多相關(guān)JAVA的隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Java中按值調(diào)用和按引用調(diào)用

    在Java中按值調(diào)用和按引用調(diào)用

    這篇文章主要介紹了Java中的按值調(diào)用和按引用調(diào)用,一種是按值調(diào)用,另一種是按引用調(diào)用,這兩種方式通常根據(jù)作為輸入或參數(shù)傳遞給它們的值的類型來(lái)區(qū)分,下文相關(guān)的更多詳細(xì)資料感興趣的小伙伴可以參考一下
    2022-04-04
  • 使用IntelliJ IDEA 15和Maven創(chuàng)建Java Web項(xiàng)目(圖文)

    使用IntelliJ IDEA 15和Maven創(chuàng)建Java Web項(xiàng)目(圖文)

    本篇文章主要介紹了使用IntelliJ IDEA 15和Maven創(chuàng)建Java Web項(xiàng)目(圖文),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java多種文件復(fù)制方式以及效率對(duì)比分析

    Java多種文件復(fù)制方式以及效率對(duì)比分析

    本文總結(jié)了Java復(fù)制文件的多種方式,包括傳統(tǒng)的字節(jié)流、字符流、NIO系列、第三方包中的FileUtils等,并提供了不同方式的效率比較,同時(shí),還介紹了遍歷文件和文件夾的方法,并使用Swing進(jìn)行了簡(jiǎn)單的圖形界面展示,通過(guò)實(shí)際測(cè)試,對(duì)比了不同方法的性能,提供了參考
    2025-11-11
  • 在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決

    在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決

    這篇文章主要介紹了在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java算法題常用函數(shù)詳解

    Java算法題常用函數(shù)詳解

    這篇文章主要介紹了Java中常用的字符串操作、字符串轉(zhuǎn)換、字符串處理、字符串緩沖區(qū)、棧、數(shù)組、列表、隊(duì)列、優(yōu)先隊(duì)列、Map和HashMap的常用函數(shù)和操作,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 使用mybatis-plus分頁(yè)出現(xiàn)兩個(gè)Limit的問(wèn)題解決

    使用mybatis-plus分頁(yè)出現(xiàn)兩個(gè)Limit的問(wèn)題解決

    在使用MyBatis-Plus進(jìn)行分頁(yè)查詢時(shí),可能會(huì)遇到查詢SQL中出現(xiàn)兩個(gè)limit語(yǔ)句的問(wèn)題,這通常是由于在多個(gè)模塊中重復(fù)引入了MyBatis-Plus的分頁(yè)插件所導(dǎo)致的,下面就來(lái)介紹一下如何解決,感興趣的可以了解一下
    2024-10-10
  • java模擬ATM功能(控制臺(tái)連接Mysql數(shù)據(jù)庫(kù))

    java模擬ATM功能(控制臺(tái)連接Mysql數(shù)據(jù)庫(kù))

    這篇文章主要介紹了java模擬ATM功能,控制臺(tái)連接Mysql數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java中int、double、char等變量的取值范圍詳析

    java中int、double、char等變量的取值范圍詳析

    這篇文章主要給大家介紹了關(guān)于java中int、double、char等變量取值范圍的相關(guān)資料,每個(gè)變量都給出了詳細(xì)的實(shí)例代碼,對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 詳解如何配置Spring Batch批處理失敗重試機(jī)制

    詳解如何配置Spring Batch批處理失敗重試機(jī)制

    這篇文章主要來(lái)和大家一起探討一下如何在Spring批處理框架中配置重試邏輯,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Java中重載與重寫的對(duì)比與區(qū)別

    Java中重載與重寫的對(duì)比與區(qū)別

    這篇文章主要介紹了Java中重載與重寫的對(duì)比與區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

海丰县| 定结县| 福安市| 广灵县| 公安县| 敖汉旗| 宁化县| 炉霍县| 晋城| 新昌县| 万州区| 滦平县| 高阳县| 张家口市| 沭阳县| 星子县| 贵港市| 巴青县| 陇南市| 宜兰市| 苍南县| 内丘县| 元阳县| 武威市| 清水县| 新竹县| 平武县| 来宾市| 龙山县| 平塘县| 双牌县| 宜昌市| 大化| 福泉市| 阳东县| 英超| 韶山市| 通州市| 乐山市| 寻甸| 古蔺县|