導航:首頁 > 編程語言 > javaqueue隊列

javaqueue隊列

發布時間:2023-04-28 04:14:47

⑴ 關於java隊列的申明

我這里有一個測試代碼,其中可以很明顯的看到其中區別
public class QueueTest {
public static void main(String[] args) {
BlockingQueue<String> blockQueue = new LinkedBlockingQueue<String>();//new SynchronousQueue<String>()
class QueuePuter implements Runnable{
private BlockingQueue queue;
public QueuePuter(BlockingQueue queue) {
this.queue = queue;
}

public void run() {
try {
for(int i=0;i<10;i++){
queue.put("Item "+i);
System.out.println("Put >>> Item "並兄+i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

class QueueTaker implements Runnable{
private BlockingQueue queue;
public QueueTaker(BlockingQueue queue) {
this.queue = queue;
}
public void run() {
try {
Object obj = null;
while((obj = queue.take())!=null){
System.out.println("Take >>> "+obj);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

new Thread(new QueueTaker(blockQueue)).start();
//如果是 SynchronousQueue 把這行注釋掉 程序會阻塞,說明如果沒有線程執行take()操作則所有線程的put()操作都會被阻塞。
//如果是 LinkedBlockingQueue 把這行注釋掉 程序會正常退出,說明就算沒有take()操作的線程,所有線程的put()操作也可以把所有數據寫入管道,而且管道容量可以不限。

new Thread(new QueuePuter(blockQueue)).start();
//如果是 SynchronousQueue 把這行注釋掉 程序會阻塞, 說明如果沒有線程執行put()操作則所有線程take()都會被阻塞。而且take()操作執行了幾次,則告put()操作也只能執行幾次,說明管道是沒有容量的,同時只能操作一個元素。
//如果是 LinkedBlockingQueue 把這行注釋掉 程序會阻塞, 說明如果管道是空的並且沒有線程執行put()操絕盯襲作則所有線程take()都會被阻塞。

}
}

⑵ java如何獲取Queue隊列中最後一個元素

deque才是雙端隊列,

你可以用鎮羨deque引用,然含判後御老拍E getLast();即可。

⑶ 在java中,List和隊列Queue的作用有何不同(應用場景)

隊列就是先進先出啊,對於數據只處理一次的比較有用。list一般可以反復讀取。

其實隊列可以用list實現,只是queue給了一個簡單的實現類而已。

⑷ Java設計一個名為Queue的類用於存儲整數。像棧一樣,隊列具有元素。在棧中,元素以「後進先出」的方式

參考代碼和注釋如下

簡單測試了下,如果有問題接著在討論

publicclassQueue{
privateint[]elements;
publicstaticfinalintDEFAULT_CAPACITY=8;//默認長度8
privateintsize=0;

publicQueue(){
elements=newint[DEFAULT_CAPACITY];
}

publicQueue(intcapacity){
elements=newint[capacity];

}

publicvoidenqueue(intv){
if(size>=elements.length){//數組擴容
int[]temp=newint[elements.length*2];
System.array(elements,0,temp,0,elements.length);
elements=temp;
}
elements[size++]=v;

}

publicintdequeue(){//先進先出
if(empty()){
thrownewRuntimeException("異常");
}

intx=elements[0];//先把第一個元素保存出來

//左移一位
//int[]temp=newint[elements.length];
//System.array(elements,1,temp,0,elements.length-1);
//elements=temp;

//左移一遲老位
for(inti=0;i<elements.length-1;i++){
elements[i]=elements[i+1];
}
elements[elements.length-1]=0;//外面一般訪殲斗問不了elements後面的元素可以不用歸零,但是歸零了感覺舒服點
size--;
returnx;
}

publicboolean氏旦磨empty(){
returnsize==0;
}

publicintgetSize(){
returnsize;
}
}

輸出



⑸ java對象從queue隊列中出隊,對象的一個參數變為null

你說的是雙向隊列Deque<E>吧穗梁,隊列根本沒有offerLast方法。

你這上下文代碼也沒有,我只能猜盯仔測著試了一下:

確實是para1、para2先後出隊,而且也沒啥null的情況發生啊。

你檢查是不是入隊之前那個List就有問題,它本來就是猜則運null?可以在調試模式下跟蹤一下隊列的情況。

另外糾正一下,啥叫對象的參數啊,我一下都沒明白過來,請叫人家成員變數。

⑹ java中queue的使用方法

java中的queue類是隊列數據結構管理類。在它里邊的元素可以按照添加它們的相慧握同順序被移除。
隊列通常(但並非一定)以 FIFO(先進先出)的方式排序各個元素。不過優先順序隊列和 LIFO 隊列(或堆棧)例外,前者根據提供的比較器或元素的自然順序對元素進行排序,後者稿歲按 LIFO(後進先出)的方式對元素進行排序。無論使用哪種排序方式,隊列的頭都是調用remove()或poll()所移除的元素。在 FIFO 隊列中,所有的新元素都插入隊列的末尾。其他種類的隊列可能使用不同的元素放置規則。每個Queue實現必須指定其順序屬性。

offer 添加一個元素並返回true 如果隊列已滿,則返回false
poll 移除並返問隊列頭部的元素 如果隊列為空,則返回null
peek 返回隊列頭部前敬慶的元素 如果隊列為空,則返回null
put 添加一個元素 如果隊列滿,則阻塞
take 移除並返回隊列頭部的元素 如果隊列為空,則阻塞
element 返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常

add 增加一個元索 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常
remove 移除並返回隊列頭部的元素 如果隊列為空,則拋出一個
NoSuchElementException異常

注意:poll和peek方法出錯進返回null。因此,向隊列中插入null值是不合法的。

還有帶超時的offer和poll方法重載,例如,下面的調用:
boolean success = q.offer(x,100,TimeUnit.MILLISECONDS);
嘗試在100毫秒內向隊列尾部插入一個元素。如果成功,立即返回true;否則,當到達超時進,返回false。同樣地,調用:
Object head = q.poll(100, TimeUnit.MILLISECONDS);
如果在100毫秒內成功地移除了隊列頭元素,則立即返回頭元素;否則在到達超時時,返回null。
阻塞操作有put和take。put方法在隊列滿時阻塞,take方法在隊列空時阻塞。

Queue介面與List、Set同一級別,都是繼承了Collection介面。LinkedList實現了Queue接 口。Queue介面窄化了對LinkedList的方法的訪問許可權(即在方法中的參數類型如果是Queue時,就完全只能訪問Queue介面所定義的方法 了,而不能直接訪問 LinkedList的非Queue的方法),以使得只有恰當的方法才可以使用。BlockingQueue 繼承了Queue介面。

⑺ Java中Queue和BlockingQueue的區別

阻塞隊列與普通隊列的區別在於,當隊列是空的時,從隊列中獲取元素的操作將李虛會答謹被阻塞,或者當隊列是滿時,往隊列里添加元素的操作會被阻塞。試圖從空的阻塞隊列中獲取元素的線程將會被阻塞,直到其他的線程往空的隊列插入新的元素。同樣,試圖往已滿的阻塞隊列中添加新元哪舉燃素的線程同樣也會被阻塞,直到其他的線程使隊列重新變得空閑起來,如從隊列中移除一個或者多個元素,或者完全清空隊列.
從5.0開始,JDK在java.util.concurrent包里提供了阻塞隊列的官方實現。盡管JDK中已經包含了阻塞隊列的官方實現,但是熟悉其背後的原理還是很有幫助的。一下是阻塞隊列的實現:
public class BlockingQueue {

private List queue = new LinkedList();

private int limit = 10;

public BlockingQueue(int limit){

this.limit = limit;

}

public synchronized void enqueue(Object item)

throws InterruptedException {

while(this.queue.size() == this.limit) {

wait();

}

if(this.queue.size() == 0) {

notifyAll();

}

this.queue.add(item);

}

public synchronized Object dequeue()

throws InterruptedException{

while(this.queue.size() == 0){

wait();

}

if(this.queue.size() == this.limit){

notifyAll();

}

return this.queue.remove(0);

}

}

⑻ java中創建隊列Queue的問題

因為queue是介面,不能new 介面,應該new介面實現類,你看jdk文檔,搜索queue,如圖:

看見下面有一大堆實現queue的類,選一個就行,針對隊列的,你可以選LinkedBlockingQueue,AbstrctQueue,ArrayDeque

⑼ java編程:定義一個表示隊列的泛型類Queue,分別對String對象和Integer對象執行入隊列和出隊列操作。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Queue<T>{
private static LinkedList q;
private T t;
private T getT(T t){
return t;
}
public void setT(T t){
this.t=t;
}
public Queue(T t){
this.t=t;
}
private void offer(){
if(q!=null){
q.offer(t);
}
else{
q=new LinkedList();
q.offer(t);
}
}
public List poll(){
List list=null;
while(q!=null&&q.size()>0){
list=new ArrayList();
list.add(q.poll());
}
return list;
}public static void main(String []args){
Queue<Integer>q=new Queue<Integer>(1);
q.offer();
List list=q.poll();
System.out.println("出隊列的元素為:"並滾升+list.get(0));
Queue<String>qq=new Queue<String>("1");
q.offer();
List list2=q.poll();
System.out.println("出隊列的絕老元備鄭素為:"+list2.get(0));

}
// TODO Auto-generated method stub

}

⑽ java中Queue和BlockingQueue的區別

1.BlockingQueue:支持兩個附加操作的 Queue,這空春兩個操作是:檢索元素時等待隊列變為非空,以及存儲元素時等待空間變得可用。
2.BlockingQueue 不接受 null 元素。
3.BlockingQueue 可以是限定容量的。
4.BlockingQueue 實現是線程安全的。Queue不是線程安全的。因此州辯可以將Blockingqueue用於用斗跡耐於生產者-使用者隊列。

閱讀全文

與javaqueue隊列相關的資料

熱點內容
subsample演算法 瀏覽:893
蘋果免費看書app哪個最好 瀏覽:880
c語言加密怎麼弄 瀏覽:837
c語言編譯的錯誤提示 瀏覽:763
驗機蘋果app哪個最好 瀏覽:663
光遇國際服安卓如何購買禮包 瀏覽:52
163app怎麼下載 瀏覽:244
電腦程序員下場 瀏覽:42
編譯原理ll1文法判斷 瀏覽:723
qt用vs2015編譯 瀏覽:547
結婚日子最好的演算法 瀏覽:791
安卓怎麼把數據傳到蘋果里 瀏覽:501
編譯器標識 瀏覽:789
編程珠璣第三章 瀏覽:782
windows如何開啟tftp伺服器 瀏覽:107
歐姆龍plc編程指令表 瀏覽:186
程序員遠程收入不穩定 瀏覽:860
演算法原理怎麼寫 瀏覽:469
有個動漫女主藍頭發是程序員 瀏覽:998
雲伺服器資源評估 瀏覽:882