Java——(六)Collection之Queue集合

來源:互聯網
上載者:User

標籤:

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

Queue集合

  Queue集合用於類比隊列這種資料結構,隊列通常是指“先進先出‘(FIFO)的容器。隊列

的頭部儲存在隊列中存放時間最長的元素,隊列的尾部儲存咋隊列中存放時間最短的元素。新元

素插入(offer)到隊列的尾部,訪問元素(poll)操作會返回隊列頭部的元素。通常隊列不允許

隨機訪問隊列中的元素。

  Queue介面中定義了如下幾個方法:

  1)void add(Object o):將指定元素加入此隊列的尾部。

  2)Object element():擷取隊列頭部的元素,但是不刪除該元素。

  3)boolean offer(Object o):將指定元素加入此隊列的尾部。當時也有容量限制的隊列時,

  此方法通常比add(Object o)方法更好

  4)Object peek():擷取隊列頭部的元素,但不刪除該元素,如果此隊列為空白,則返回null。

  5)Object poll():擷取隊列頭部的元素,刪除該元素,如果此隊列為空白,則返回null。

  6)Object remove():擷取隊列頭部的元素,並刪除該元素。

  Queue介面有一個PriorityQueue實作類別。此外,Queue還有一個Deque介面,它的實作類別

即可當成隊列使用,也可當成棧使用。Java為Deque提供了ArrayDeque和LinkedList兩個實現類。

1.PriorityQueue實作類別

  PriorityQueue是一個比較標準的隊列實作類別。PriorityQueue儲存隊列元素的順序並不是按加

入隊列的順序,而是按隊列元素的大小進行重新排列。因此當調用peek()方法或者poll()方法取出隊

列中的元素時,並不是取出最先進入隊列的元素,而是取出隊列中最小的元素。下面示範了

PriorityQueue隊列的用法。

 

import java.util.PriorityQueue;public class PriorityQueueTest {    public static void main(String[] args) {        PriorityQueue pq = new PriorityQueue();                pq.offer(6);        pq.offer(-3);        pq.offer(9);        pq.offer(0);        System.out.println(pq);        System.out.println(pq.poll());        System.out.println(pq.peek());    }}

運行結果:

 

[-3, 0, 9, 6]-30

2.Deque介面與ArrayDeque實作類別

  Deque介面是Queue介面的子介面,它代表一個雙端隊列,Deque介面裡定義了一些雙端隊列

的方法:

1)void addFirst(Object o):將指定元素插入該雙端隊列的開頭。

2)void addLast(Object o):將指定元素插入該雙端隊列的末尾。

3)Iterator descendingIterator():返回該雙端隊列對應的迭代器,該迭代器將以逆向順序來迭代隊列中的元素。

4)Object getFirst():擷取但不刪除雙端隊列的第一個元素。
5)Object getLast():擷取但不刪除雙端隊列的最後一個元素。

6)boolean offerFirst(Object o):將指定元素插入該雙端隊列的開頭。
7)boolean offerLast(Object o):將指定元素插入該雙端隊列的末尾。

8)Object peekFirst():擷取但不刪除該雙端隊列的第一個元素;如果此雙端隊列為空白,則返回null。

9)Object peekLast():擷取但不刪除該雙端隊列的最後一個元素;如果此雙端隊列為空白,則返回null。

10)Object pollFirst():擷取並刪除該雙端隊列的第一個元素;如果此雙端隊列為空白,則返回null。

11)Object pollLast():擷取並刪除該雙端隊列的最後一個元素;如果此雙端隊列為空白,則返回null。

12)Object pop()(棧方法):pop出該雙端隊列所表示的棧頂元素。相當於removeFirst()。

13)void push(Object o)(棧方法):將一個元素push進該雙端隊列所表示的棧的棧頂。相當於addFirst(o)。
14)Object removeFirst():擷取並刪除該雙端隊列的第一個元素。

15)Object removeFirstOccurrence(Object o):刪除該雙端隊列的第一次出現的元素o。
16)removeLast():刪除該雙端隊列的最後一個元素。

17)removeFirstOccurrence(Object o):刪除該雙端隊列的最後一次出現的元素o。

  Deque介面提供了一個典型的實作類別:ArrayDeque,它是一個基於數字實現的雙端隊列,建立Deque時

可以指定一個numElement參數,該參數用於指定Object[]數組的長度;如果不指定numElement參數,

Deque底層數組的長度為16.

提示:ArrayList和arrayDeque兩個集合類的實現機制基本相似,它們的底層都採用一個動態、可重分配的

Object[]數組來儲存集合元素,當集合元素超出了該數組的容器時,系統會在底層重新分配一個Object[]數組

來儲存集合元素。

 

2.LinkedList實作類別

  LinkedList類是List介面的實作類別,此外,LinkedList還實現了Deque介面。下面程式示範了LinkedList集

合的用法。

 1 import java.util.LinkedList; 2  3  4 public class LinkedListTest { 5  6     public static void main(String[] args) { 7  8         LinkedList llLinkedList = new LinkedList<>(); 9         //將字串元素排入佇列尾部10         llLinkedList.offer("黑馬程式員");11         //將字串元素加入棧的棧頂12         llLinkedList.push("傳智播客");13         //將字串元素添加到隊列的頭部,相當於棧的頂部14         llLinkedList.offerFirst("CSDN");15         16         for (int i = 0; i < llLinkedList.size(); i++) {17             System.out.println(llLinkedList.get(i));18         }19         //訪問但不刪除棧頂一個元素20         System.out.println(llLinkedList.peekFirst());21         //訪問但不刪除隊列的最後一個元素22         System.out.println(llLinkedList.peekLast());23         //將棧頂的元素彈出“棧”24         System.out.println(llLinkedList.pop());25         //可以看到隊列中的第一個元素被刪除26         System.out.println(llLinkedList);27         //訪問並刪除隊列的最後一個元素28         System.out.println(llLinkedList.pollLast());29         System.out.println(llLinkedList);30     }31 32 }

運行結果:

CSDN傳智播客黑馬程式員CSDN黑馬程式員CSDN[傳智播客, 黑馬程式員]黑馬程式員[傳智播客]

   LinkedList與ArrayList、ArrayDeque的實現機制完全不同,ArrayList、ArrayDeque內部

以數組的形式來儲存集合中的元素,因此隨機訪問集合元素時有較好的效能;而LinkedList內部以

鏈表的形式來儲存集合中的元素,因此隨機訪問集合元素時效能較差,但在插入、刪除元素時效能

非常出色(只需改變指標所指的地址即可)。需要指出的是,雖然Vector也是以數組的形式來儲存

集合元素的,但因為他實現了線程同步功能,所以各方面效能都有所下降。

 

Java——(六)Collection之Queue集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.