java隊列,java隊列有哪些

本文目錄一覽:

java中的隊列都有哪些

常見的有:

有界隊列:

ArrayBlockingQueue

LinkedBlockingQuene

priorityBlockingQuene(具有優先順序的隊列)

無界隊列:

SynchronousQuene

java中怎麼實現隊列

public class QueueE {

private Object[] data=null;

private int maxSize; //隊列容量

private int front; //隊列頭,允許刪除

private int rear; //隊列尾,允許插入

//構造函數

public Queue(){

this(10);

}

public Queue(int initialSize){

if(initialSize =0){

this.maxSize = initialSize;

data = new Object[initialSize];

front = rear =0;

}else{

throw new RuntimeException(“初始化大小不能小於0:” + initialSize);

}

}

//判空

public boolean empty(){

return rear==front?true:false;

}

//插入

public boolean add(E e){

if(rear== maxSize){

throw new RuntimeException(“隊列已滿,無法插入新的元素!”);

}else{

data[rear++]=e;

return true;

}

}

//返回隊首元素,但不刪除

public E peek(){

if(empty()){

throw new RuntimeException(“空隊列異常!”);

}else{

return (E) data[front];

}

}

//出隊

public E poll(){

if(empty()){

throw new RuntimeException(“空隊列異常!”);

}else{

E value = (E) data[front]; //保留隊列的front端的元素的值

data[front++] = null; //釋放隊列的front端的元素

return value;

}

}

//隊列長度

public int length(){

return rear-front;

}

}

Java中的隊列都有哪些,有什麼區別

阻塞隊列與普通隊列的區別在於,當隊列是空的時,從隊列中獲取元素的操作將會被阻塞,或者當隊列是滿時,往隊列里添加元素的操作會被阻塞。試圖從空的阻塞隊列中獲取元素的線程將會被阻塞,直到其他的線程往空的隊列插入新的元素。同樣,試圖往已滿的阻塞隊列中添加新元素的線程同樣也會被阻塞,直到其他的線程使隊列重新變得空閑起來,如從隊列中移除一個或者多個元素,或者完全清空隊列.

從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類有哪些用法?

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):是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表;

棧(Stack):是限定只能在表的一端進行插入和刪除操作的線性表。

區別如下:

一、規則不同

1. 隊列:先進先出(First In First Out)FIFO

2. 棧:先進後出(First In Last Out )FILO

二、對插入和刪除操作的限定不同

1. 隊列:只能在表的一端進行插入,並在表的另一端進行刪除;

2. 棧:只能在表的一端插入和刪除。

三、遍曆數據速度不同

1.

隊列:基於地址指針進行遍歷,而且可以從頭部或者尾部進行遍歷,但不能同時遍歷,無需開闢空間,因為在遍歷的過程中不影響數據結構,所以遍歷速度要快;

2.

棧:只能從頂部取數據,也就是說最先進入棧底的,需要遍歷整個棧才能取出來,而且在遍曆數據的同時需要為數據開闢臨時空間,保持數據在遍歷前的一致性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249717.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 17:12
下一篇 2024-12-12 17:12

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Python通配符有哪些

    Python通配符是一種表示字元串中模糊匹配的有效工具,用於匹配與具有特定模式匹配的字元串。Python中主要的通配符有:*,?,[]和{}。 一、星號通配符 * 在Python中…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論