亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java知識點總結(jié)(Java容器-Queue)

hedzr / 1578人閱讀

摘要:知識點總結(jié)容器知識點總結(jié)容器接口與是在同一級別,都是繼承了接口。另一種隊列則是雙端隊列,支持在頭尾兩端插入和移除元素,主要包括。一個由鏈表結(jié)構(gòu)組成的無界阻塞隊列。是一個阻塞的線程安全的隊列,底層實現(xiàn)也是使用鏈?zhǔn)浇Y(jié)構(gòu)。

Java知識點總結(jié)(Java容器-Queue)

@(Java知識點總結(jié))[Java, Java容器]

Queue

Queue接口與List、Set是在同一級別,都是繼承了Collection接口。LinkedList接口實現(xiàn)了Queue接口。Queue接口收縮了對LinkedList的方法訪問權(quán)限(也就是方法參數(shù)如果是Queue,那就只能方法Queue接口定義的方法),讓方法能夠正確的使用。

隊列

隊列是一種數(shù)據(jù)結(jié)構(gòu),它有兩個基本操作:在隊列尾部添加一個元素,和在隊列頭部移除一個元素。也就是說,隊列以一種先進(jìn)先出(FIFO)的方式操作數(shù)據(jù)。
隊列,它主要分為兩大類,一類是阻塞式隊列,隊列滿了以后再插入元素則會拋出異常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。另一種隊列則是雙端隊列,支持在頭、尾兩端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。

隊列方法
方法 功能 異常處理
add 增加一個元索 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常
remove 移除并返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
element 返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
offer 添加一個元素并返回true 如果隊列已滿,則返回false
poll 移除并返問隊列頭部的元素 如果隊列為空,則返回null
peek 返回隊列頭部的元素 如果隊列為空,則返回null
put 添加一個元素 如果隊列滿,則阻塞
take 移除并返回隊列頭部的元素 如果隊列為空,則阻塞

拋出異常:是指當(dāng)阻塞隊列滿時候,再往隊列里插入元素,會拋出IllegalStateException(“Queue full”)異常。當(dāng)隊列為空時,從隊列里獲取元素時會拋出NoSuchElementException異常 。

返回特殊值:插入方法會返回是否成功,成功則返回true。移除方法,則是從隊列里拿出一個元素,如果沒有則返回null

一直阻塞:當(dāng)阻塞隊列滿時,如果生產(chǎn)者線程往隊列里put元素,隊列會一直阻塞生產(chǎn)者線程,直到拿到數(shù)據(jù),或者響應(yīng)* 中斷退出。當(dāng)隊列空時,消費者線程試圖從隊列里take元素,隊列也會阻塞消費者線程,直到隊列可用。

超時退出:當(dāng)阻塞隊列滿時,隊列會阻塞生產(chǎn)者線程一段時間,如果超過一定的時間,生產(chǎn)者線程就會退出。

阻塞隊列

ArrayBlockingQueue :一個由數(shù)組結(jié)構(gòu)組成的有界阻塞隊列。
LinkedBlockingQueue :一個由鏈表結(jié)構(gòu)組成的有界阻塞隊列。
PriorityBlockingQueue :一個支持優(yōu)先級排序的無界阻塞隊列。
DelayQueue:一個使用優(yōu)先級隊列實現(xiàn)的無界阻塞隊列。
SynchronousQueue:一個不存儲元素的阻塞隊列。
LinkedTransferQueue:一個由鏈表結(jié)構(gòu)組成的無界阻塞隊列。
LinkedBlockingDeque:一個由鏈表結(jié)構(gòu)組成的雙向阻塞隊列。

非阻塞隊列

ConcurrentLinkedQueue :基于鏈接節(jié)點的無界線程安全隊列

Queue的使用
/**
 * 隊列測試:實現(xiàn)類使用LinkedList
 * 
 * Queue也有很多其他的實現(xiàn)類,比如java.util.concurrent.LinkedBlockingQueue。
 * LinkedBlockingQueue是一個阻塞的線程安全的隊列,底層實現(xiàn)也是使用鏈?zhǔn)浇Y(jié)構(gòu)。
 */
public class TestQuene {

    // 定義一個隊列
    Queue queue;

    @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(); // 先進(jìn)先出,彈出了a
        System.out.println(pollEle); // a
        System.out.println(queue); // [b, c, d, e]
    }

    // remove方法移除首個元素并返回,若隊列為空,會拋出異常:NoSuchElementException,不推薦使用
    @Test
    public void test2() {
        // 彈出元素
        String remove = queue.remove(); // 先進(jìn)先出,彈出了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]
    }

}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71420.html

相關(guān)文章

  • Week 2 - Java 容器 - 詳細(xì)剖析 List 之 ArrayList, Vector,

    摘要:底層使用的是雙向鏈表數(shù)據(jù)結(jié)構(gòu)之前為循環(huán)鏈表,取消了循環(huán)??焖匐S機訪問就是通過元素的序號快速獲取元素對象對應(yīng)于方法。而接口就是用來標(biāo)識該類支持快速隨機訪問。僅僅是起標(biāo)識作用。,中文名為雙端隊列。不同的是,是線程安全的,內(nèi)部使用了進(jìn)行同步。 前言 學(xué)習(xí)情況記錄 時間:week 2 SMART子目標(biāo) :Java 容器 記錄在學(xué)習(xí)Java容器 知識點中,關(guān)于List的需要重點記錄的知識點。...

    MartinDai 評論0 收藏0
  • 通俗易懂,JDK 并發(fā)容器總結(jié)

    摘要:線程安全的線程安全的,在讀多寫少的場合性能非常好,遠(yuǎn)遠(yuǎn)好于高效的并發(fā)隊列,使用鏈表實現(xiàn)。這樣帶來的好處是在高并發(fā)的情況下,你會需要一個全局鎖來保證整個平衡樹的線程安全。 該文已加入開源項目:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目,Star 數(shù)接近 14 k)。地址:https://github.com/Snailclimb... 一 JDK ...

    curlyCheng 評論0 收藏0
  • Java 基礎(chǔ) | Collection 集合概覽

    摘要:說到復(fù)盤基礎(chǔ),并不是所有的都會復(fù)盤,沒那個時間更沒那個必要。比如,一些基礎(chǔ)的語法以及條件語句,極度簡單。思前想后,我覺得整個計劃應(yīng)該從集合開始,而復(fù)盤的方式就是讀源碼。通常,隊列不允許隨機訪問隊列中的元素。 ?showImg(https://segmentfault.com/img/remote/1460000020029737?w=1080&h=711); 老讀者都知道,我是自學(xué)轉(zhuǎn)行...

    codergarden 評論0 收藏0
  • [Java并發(fā)-11] 并發(fā)容器的使用

    摘要:同步容器及其注意事項中的容器主要可以分為四個大類,分別是和,但并不是所有的容器都是線程安全的。并發(fā)容器及其注意事項在版本之前所謂的線程安全的容器,主要指的就是同步容器,當(dāng)然因為所有方法都用來保證互斥,串行度太高了,性能太差了。 Java 并發(fā)包有很大一部分內(nèi)容都是關(guān)于并發(fā)容器的,因此學(xué)習(xí)和搞懂這部分的內(nèi)容很有必要。 Java 1.5 之前提供的同步容器雖然也能保證線程安全,但是性能很差...

    legendaryedu 評論0 收藏0
  • JMS 在 SpringBoot 中的使用

    摘要:本文主要講述消息服務(wù)在中的使用。所以需要一個監(jiān)聽容器工廠的概念,即接口,它會引用上面創(chuàng)建好的與的連接工廠,由它來負(fù)責(zé)接收消息以及將消息分發(fā)給指定的監(jiān)聽器。為了消費消息,訂閱者必須保持運行的狀態(tài)。 JMS 在 SpringBoot 中的使用 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog> 本文所有服務(wù)均采用doc...

    Michael_Ding 評論0 收藏0

發(fā)表評論

0條評論

hedzr

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<