Queue和List的區別

2021-10-22 07:57:41 字數 2794 閱讀 4602

queue 與list, linkedlist與 arraylist 用法與區別

list 是乙個介面,不能例項化,通過例項化arraylist 或者linkedlist來呼叫

list list = new arraylist();

|--list:元素是有序的(怎麼存的就怎麼取出來,順序不會亂),元素可以重複(角標1上有個3,角標2上也可以有個3)因為該集合體系有索引,

|-- arraylist:底層的資料結構使用的是陣列結構(陣列長度是可變的百分之五十延長)(特點是查詢很快,但增刪較慢)執行緒不同步

|-- linkedlist:底層的資料結構是鍊錶結構(特點是查詢較慢,增刪較快)

|-- vector:底層是陣列資料結構 執行緒同步(陣列長度是可變的百分之百延長)(無論查詢還是增刪都很慢,被arraylist替代了)

list 介面下的方法有: 

boolean add(int index, e element)

boolean addall(index, collection)

boolean remove(int index)

set(int index, e element) //修改指定角標的元素,返回修改的元素

get( int index) //返回列表中指定位置的元素

sublist(int fromindex, int toindex) 返回指定範圍間(fromindex(包括) toindex(不包括))的元素

queue介面與list、set同一級別,都是繼承了collection介面

linkedlist實現了queue介面。queue介面窄化了對linkedlist的方法的訪問許可權(即在方法中的引數型別如果是queue時,就完全只能訪問queue介面所定義的方法 了,而不能直接訪問linkedlist的非queue的方法),以使得只有恰當的方法才可以使用。

blockingqueue繼承了queue介面。

佇列是一種資料結構.它有兩個基本操作:在佇列尾部加人乙個元素,和從佇列頭部移除乙個元素就是說,佇列以一種先進先出的方式管理資料,如果你試圖向乙個 已經滿了的阻塞佇列中新增乙個元素或者是從乙個空的阻塞佇列中移除乙個元索,將導致執行緒阻塞.在多執行緒進行合作時,阻塞佇列是很有用的工具。

工作者執行緒可 以定期地把中間結果存到阻塞佇列中而其他工作者線執行緒把中間結果取出並在將來修改它們。佇列會自動平衡負載。如果第乙個執行緒集執行得比第二個慢,則第二個 執行緒集在等待結果時就會阻塞。如果第乙個執行緒集執行得快,那麼它將等待第二個執行緒集趕上來。下表顯示了jdk1.5中的阻塞佇列的操作:

add        增加乙個元索                     如果佇列已滿,則丟擲乙個iiiegaislabeepeplian異常

remove 移除並返回佇列頭部的元素 如果隊列為空,則丟擲乙個nosuchelementexception異常

element 返回佇列頭部的元素 如果隊列為空,則丟擲乙個nosuchelementexception異常

offer 新增乙個元素並返回true 如果佇列已滿,則返回false

poll 移除並返問佇列頭部的元素 如果隊列為空,則返回null

peek 返回佇列頭部的元素 如果隊列為空,則返回null

put 新增乙個元素 如果佇列滿,則阻塞

take 移除並返回佇列頭部的元素 如果隊列為空,則阻塞

linkedlist 繼承list介面,特有方法:

addfirst(); 在頭部新增元素 addlast();在尾部新增元素

getfirst(); getlast(); 獲取元素但不刪除

removefirst(); removelast(); 獲取並且刪除  

jkd1.6**現了替代方法  

offerfirst(); offerlast();

peekfirst(); peeklast(); 獲取元素,但是元素不被刪除。如果集合中沒有元素,會返回null

pollfirst(); polllast(); 獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null

arraylist繼承list介面,特有方法:

count屬性 記錄當前列表的元素個數

capacity屬性 記錄能包含的最大數量,可改

add方法用於新增乙個元素到當前列表的末尾

addrange方法用於新增一批元素到當前列表的末尾

remove方法用於刪除乙個元素,通過元素本身的引用來刪除

removeat方法用於刪除乙個元素,通過索引值來刪除

removerange用於刪除一批元素,通過指定開始的索引和刪除的數量來刪除

insert用於新增乙個元素到指定位置,列表後面的元素依次往後移動

insertrange用於從指定位置開始新增一批元素,列表後面的元素依次往後移動

另外,還有幾個類似的方法:

clear方法用於清除現有所有的元素

contains方法用來查詢某個物件在不在列表之中

Queue 和Stack 的區別

protected void page load object sender,eventargs e queue 先進先出。所以結果是123 true string str1 queue.dequeue tostring foreach object obj in queue string str2...

Go 用list實現stack和queue

go的container list 包裡面帶的list,有在鍊錶頭部和尾巴插入元素,和獲取頭部和尾部元素的操作,因此我們可以用list來實現棧和佇列的功能。import container list fmt func stacktest for ele stack.back 取出鍊錶最後乙個元素 v...

list集合與queue集合

1 特點 元素是有序 可重複的,因為該集合體系有索引。list體系下listiterator介面在iterator介面基礎上增加了如下方法 void add object o 在指定位置插入乙個元素 2 實現類 arraylist和vector作為list類的兩個典型實現,完全支援之前介紹的list...