java Queue佇列相關總結
Queue:
按照新增的順序排列,FIFO(先進先出)。
通常佇列使用兩個方法:offer、poll。因為如果存放或者獲取失敗,返回false或者null(這種情況下不要往容器中新增null),而不是拋異常(異常很討厭額^_^)
執行緒不安全的佇列
-
LinkedList
--implemets Deque
由於實現了雙端佇列的介面,所以“LinkedList is a Queue”。可以將其當做一個佇列來使用(同樣可以使用offer、poll方法)。但是它是執行緒不安全的。 - PriorityQueue
特點是有序的,每新增一個元素會按照排序規則重新排序。如何定義排序規則呢?第一種,使用預設的排序規則,即元素實現Comparable介面中的compareTo方法;第二種,使用容器自身的排序規則,初始化時傳入一個Comparator,
實現該介面的compare方法。compare的優先順序高於compareTo。
執行緒安全的佇列
- ConcurrentLinkedQueue
位於jdk1.5出的concurrent包下,所以這個類是執行緒安全的,依賴CAS機制實現(compareAndSwap:取出當前值,然後與預期值比較,如果一致,用更新值替換當前值,這一連串操作是原子操作,來源於CPU指令集)。
屬於非阻塞佇列,相對於阻塞的佇列來說,效率要高一些。 - LinkedBlockingQueue
位於jdk1.5出的concurrent包下,所以這個類是執行緒安全的,依賴Reentrant鎖來實現。
屬於阻塞佇列(使用put、take方法,如果佇列已滿或者已空,則一直阻塞下去)。
屬於無界佇列(理論上來說是最大值為Integer.MAX_VALUE)
concurrent包下的5個阻塞對列
- ArrayBlockingQueue :一個由陣列支援的有界佇列。
- LinkedBlockingQueue :一個由連結節點支援的可選有界佇列。
- PriorityBlockingQueue :一個由優先順序堆支援的無界優先順序佇列。
- DelayQueue :一個由優先順序堆支援的、基於時間的排程佇列。
- SynchronousQueue :一個利用 BlockingQueue 介面的簡單聚集(rendezvous)機制。
區分佇列的相關集合的特點貌似有點兒困難,但是隻要記住這幾條黃金法則即可
- 看到array就要想到有界
- 看到linked就要想到first、last、無界
- 看到bloking就要想到阻塞(阻塞的兩個方法put、take)
- 看到priorit就要想到兩個介面:Comparable和Comparator
佇列中幾種操作
- add 增加一個元索 如果佇列已滿,則丟擲一個IIIegaISlabEepeplian異常
- remove 移除並返回佇列頭部的元素 如果佇列為空,則丟擲一個NoSuchElementException異常
- element 返回佇列頭部的元素 如果佇列為空,則丟擲一個NoSuchElementException異常
- offer 新增一個元素並返回true 如果佇列已滿,則返回false
- poll 移除並返問佇列頭部的元素 如果佇列為空,則返回null
- peek 返回佇列頭部的元素 如果佇列為空,則返回null
- put 新增一個元素 如果佇列滿,則阻塞
- take 移除並返回佇列頭部的元素 如果佇列為空,則阻塞
相關文章
- js資料結構--佇列(queue)JS資料結構佇列
- 資料結構之佇列(Queue)資料結構佇列
- python佇列QueuePython佇列
- JDK QUEUE佇列JDK佇列
- Team Queue(佇列)佇列
- 佇列mq 相關佇列MQ
- java Set相關總結Java
- java List相關總結Java
- java Map相關總結Java
- C# 佇列(Queue)C#佇列
- 【資料結構】棧(Stack)和佇列(Queue)資料結構佇列
- java集合類——Stack棧類與Queue佇列Java佇列
- 資料結構C語言|佇列相關資料結構C語言佇列
- 佇列(Queue)-c實現佇列
- 連結串列、棧、佇列、KMP相關知識點佇列KMP
- laravel原始碼分析-佇列QueueLaravel原始碼佇列
- Java中常用七個阻塞佇列的總結Java佇列
- 【Java 併發筆記】7 種阻塞佇列相關整理Java筆記佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- 訊息佇列mq總結佇列MQ
- Laravel佇列相關問題記錄Laravel佇列
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- 【Java程式設計】使用Java模擬C/C++中的queue佇列Java程式設計C++佇列
- Java與Mysql鎖相關知識總結JavaMySql
- Throwing cards away I(queue迴圈佇列)佇列
- Team Queue (佇列的一種應用)佇列
- python的queue佇列獲取資料Python佇列
- Ajax 相關總結
- 紅寶書總結-js陣列的相關方法JS陣列
- Java集合體系總結 Set、List、Map、QueueJava
- Stack and Queue in JavaScript(Javascript中的資料結構之棧和佇列)JavaScript資料結構佇列
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- C++ STL 優先佇列 (priority_queue)C++佇列
- Springmvc相關配置總結SpringMVC
- vue原理相關總結Vue
- 訊息佇列Kafka學習總結佇列Kafka
- 相機成像相關知識總結
- java的強引用、軟引用、弱引用、幻象引用,引用佇列總結Java佇列