java學習筆記 集合之棧和佇列

2021-08-08 23:15:15 字數 4188 閱讀 5517

棧是vector的乙個子類,它實現了乙個標準的後進先出的棧。堆疊只定義了預設建構函式,用來建立乙個空棧。 堆疊除了包括由vector定義的所有方法,也定義了自己的一些方法。

boolean empty()  //判斷棧是否為空

object peek() //檢視堆疊頂部的物件,但不從堆疊中移除它。

object pop() //移除堆疊頂部的物件,並作為此函式的值返回該物件。

object push(e element) //把項壓入堆疊頂部。

int search(object element) //返回物件在堆疊中的位置,以 1 為基數。

下面的**演示了棧的基本用法

public static void main(string args)

}

輸出結果為

stack中棧頂的元素: d

stack中b的元素索引: 3

d c b a

佇列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。linkedlist類實現了queue介面,因此我們可以把linkedlist當成queue來用。

queue的主要方法如下

boolean add(object element)    //向隊的末尾新增元素,如果佇列已滿,會丟擲異常

boolean offer(object element) //相隊的末尾新增元素,如果佇列已滿,返回false,推薦使用

object remove() //刪除並返回佇列頭部的元素,如果隊列為空丟擲異常

object poll() //刪除並返回佇列頭部的元素,如果隊列為空返回null,推薦使用

object element() //返回佇列頭部的元素,如果隊列為空丟擲異常

object peek() //返回佇列頭部的元素,如果隊列為空返回null,推薦使用

一般佇列 queue

一般佇列的示例**如下

public static void main(string args)

system.out

.println( "\n隊列為空 poll " + queuelist.poll());

system.out

.println( "隊列為空 peek " + queuelist.peek());

//使用add方法

queuelist.add("a");

queuelist.add("b");

queuelist.add("c");

queuelist.add("d");

system.out

.println("queuelist element 棧頂元素: " + queuelist.element());

while(!queuelist.isempty())

try catch(nosuchelementexception e)

try catch(nosuchelementexception e)

}

輸出結果為

queuelist peek 棧頂元素: a

a b c d

隊列為空 poll null

隊列為空 peek null

queuelist element 棧頂元素: a

a b c d

隊列為空 remove 捕獲異常

隊列為空 element 捕獲異常

雙向佇列 deque

queue介面是單向佇列,它有乙個子介面deque,表示雙向佇列。雙向佇列的特點是在佇列的頭部和尾部都可以新增或刪除元素。它可以使用new arraydeque<>()來初始化,同時linkedlist實現了它的介面,也可使用new linkedlist<>()來初始化。

主要方法如下

//向佇列的頭部或者尾部新增元素,如果佇列已滿會丟擲異常

void addfirst(object element)

void addlast(object element)

//向佇列的頭部或者尾部新增元素,如果佇列已滿返回false

boolean offerfirst(object element)

boolean offerlast(object element)

//從頭部或尾部刪除元素,如果隊列為空丟擲異常

object removefirst()

object removelast()

//從頭部或尾部刪除元素,如果隊列為空返回nul

object pollfirst()

object polllast()

//從佇列頭部或者尾部獲取元素,如果隊列為空丟擲異常

object getfirst()

object getlast()

//從佇列頭部或者尾部獲取元素,如果隊列為空返回null

object peekfirst()

object peeklast()

示例**

public

static

void main(string args)

}

輸出結果

遍歷雙向佇列 

a b c d

優先順序佇列 priorityqueue

優先順序佇列會按照排序的方式對佇列中的元素進行排序和檢索。因此加入到priorityqueue中的物件必須實現comparable介面,提供對元素排序時兩個元素之間的比較規則。

示例**

public static void main(string args)

system.out

.println("\n依次刪除優先順序佇列中的元素");

while(!priorityqueue.isempty())

}

注意的是,用foreach語句遍歷優先順序佇列時,獲得元素並沒有排序,而在通過poll()或者remove()方法刪除元素時,該方法總會刪除當前佇列中最小的元素。

以上**輸出結果為

遍歷優先順序佇列 

a b d c

依次刪除優先順序佇列中的元素

a b c d

linkedlist在實現中採用了鍊錶的資料結構,對順序訪問進行了優化,向lsit中插入和刪除元素的速度較快,隨機訪問則相對較慢。而且linkedlist實現了實現了較多的介面,它可以作為棧、佇列和雙向佇列使用。

示例**如下

public static void main(string args)

system.out

.println();

system.out

.println("linklist queue offer方法: ");

linklist.offer("a");

linklist.offer("b");

linklist.offer("c");

linklist.offer("d");

while(!linklist.isempty())

system.out

.println();

system.out

.println("linklist queue add方法: ");

linklist.add("a");

linklist.add("b");

linklist.add("c");

linklist.add("d");

while(!linklist.isempty())

}

輸出結果如下

linklist stack: 

d c b a

linklist queue offer方法:

a b c d

linklist queue add方法:

a b c d

C 學習筆記之棧和佇列

使用棧,要先包含標頭檔案 include stack stack int s 定義 int item 0 s.push item 將item壓入棧頂 s.pop 刪除棧頂的元素,但不會返回 s.top 返回棧頂的元素,但不會刪除 s.size 返回棧中元素的個數 s.empty 檢查棧是否為空,如果...

Java集合之佇列

jdk兩套佇列 為什麼要使用阻塞佇列?消費者和生產者不會保持相同的速度,如生產者快時候,佇列會越來越大,相比之下,阻塞佇列只允許生產者的速度在一定速度上超過消費者的速度,但不會超過很多。linkedblockingqueue 基於鍊錶的無界阻塞佇列,但也可以指定長度,不指定無界,內部維護了乙個鍊錶快...

java成神之 集合框架之佇列,棧,集合併發

棧 集合併發 結語此佇列第乙個元素永遠是最小的,先進先出 priorityqueuequeue new priorityqueue 雙端佇列 dequedequea new linkedlist dequea.add element 1 dequea.addfirst element 2 deque...