Java集合隊列常考點:Collection接口和Map接口,隊列Queue

集合常考點:Collection接口和Map接口

隊列Queue常考點:

以下翻譯來自java8的官方文檔:

1、LinkedBlockingQueue

基於鏈接節點的可選限定阻塞隊列 blocking queue 。這個隊列排列元素FIFO(先進先出)。 隊列的頭部是隊列中最長的元素。 隊列的尾部是隊列中最短時間的元素。 新元素插入隊列的尾部,隊列檢索操作獲取隊列頭部的元素。 鏈接隊列通常具有比基於陣列的隊列更高的吞吐量,但在大多數併發應用程序中的可預測性能較低。
blocking queue說明:不接受null元素,可能是容量有限的(可選是否有界);實現被設計爲主要用於生產者 - 消費者隊列;不支持任何類型的“關閉”或“關閉”操作,表示不再添加項目實現是線程安全的;

2、PriorityQueue

2.1、基於優先級堆的無限優先級queue 。 優先級隊列的元素根據它們的有序natural ordering ,或由一個Comparator在隊列構造的時候提供,這取決於所使用的構造方法。 優先隊列不允許null元素。 依靠自然排序的優先級隊列也不允許插入不可比較的對象(這樣做可能導致ClassCastException )。
2.2、該隊列的頭部是相對於指定順序的最小元素。 如果多個元素被綁定到最小值,那麼頭就是這些元素之一 - 關係被任意破壞。 隊列檢索操作poll , remove , peek和element訪問在隊列的頭部的元件。
2.3、優先級隊列是無限制的(無界隊列),但是具有管理用於在隊列上存儲元素的數組的大小的內部容量 。 它始終至少與隊列大小一樣大。 當元素被添加到優先級隊列中時,其容量會自動增長。 沒有規定增長政策的細節。
2.4、該類及其迭代器實現Collection和Iterator接口的所有可選方法。 方法iterator()中提供的迭代器不能保證以任何特定順序遍歷優先級隊列的元素。 如果需要有序遍歷,請考慮使用Arrays.sort(pq.toArray()) 。
2.5、請注意,此實現不同步。 如果任何線程修改隊列,多線程不應同時訪問PriorityQueue實例(說明PriorityQueue是線程不安全的)。而是使用線程安全的PriorityBlockingQueue類
實現注意事項:此實現提供了**O(log(n))**的時間入隊和出隊方法( offer , poll , remove()和add ); remove(Object)和contains(Object)方法的線性時間; 和恆定時間檢索方法( peek , element和size )。

3、ConcurrentLinkedQueue

基於鏈接節點的併發deque(deque是雙端隊列) 。 併發插入,刪除和訪問操作可以跨多個線程安全執行。 AConcurrentLinkedDeque是許多線程將共享對公共集合的訪問的適當選擇。像大多數其他併發集合實現一樣,此類不允許使用null元素。

總結

1、LinkedBlockingQueue:可選是否有界,不允許null元素,是線程安全的。
2、PriorityQueue:無界隊列,不允許null元素,是線程不安全的。
3、ConcurrentLinkedQueue:併發雙端隊列,不允許null元素,線程是安全的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章