Queue接口
Queue是在處理之前保存元素的集合,除了基本的Collection操作外,隊列還提供額外的插入、刪除和檢查操作,Queue接口如下。
public interface Queueextends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remove(); }
每個Queue方法都有兩種形式:(1)如果操作失敗則拋出異常,(2)如果操作失敗,則返回特殊值(null或false,具體取決于操作),接口的常規結構如下表所示。
操作類型 | 拋出異常 | 返回特殊值 |
---|---|---|
插入 | add(e) | offer(e) |
移除 | remove() | poll() |
檢查 | element() | peek() |
隊列通常(但不一定)以FIFO(先進先出)方式對元素進行排序,優先級隊列除外,它們根據元素的值對元素進行排序 — 有關詳細信息,請參閱“對象排序”部分。無論使用什么排序,隊列的頭部都是通過調用remove或poll移除的元素。在FIFO隊列中,所有新元素都插入隊列的尾部,其他類型的隊列可能使用不同的放置規則,每個Queue實現都必須指定其排序屬性。
Queue實現可以限制它所擁有的元素數量,這樣的隊列被稱為有界,java.util.concurrent中的某些Queue實現是有界的,但java.util中的實現不是。
Queue從Collection繼承的add方法插入一個元素,除非它違反了隊列的容量限制,在這種情況下它會拋出IllegalStateException。offer方法,僅用于有界隊列,與add不同之處僅在于它通過返回false來表示插入元素失敗。
remove和poll方法都移除并返回隊列的頭部,確切地移除哪個元素是隊列的排序策略的函數,僅當隊列為空時,remove和poll方法的行為才有所不同,在這些情況下,remove拋出NoSuchElementException,而poll返回null。
element和peek方法返回但不移除隊列的頭部,它們之間的差異與remove和poll的方式完全相同:如果隊列為空,則element拋出NoSuchElementException,而peek返回null。
隊列實現通常不允許插入null元素,為實現Queue而進行了改進的LinkedList實現是一個例外,由于歷史原因,它允許null元素,但是你應該避免利用它,因為null被poll和peek方法用作特殊的返回值。
隊列實現通常不定義equals和hashCode方法的基于元素的版本,而是從Object繼承基于標識的版本。
Queue接口不定義阻塞隊列方法,這在并發編程中很常見,這些等待元素出現或空間可用的方法在java.util.concurrent.BlockingQueue接口中定義,該接口擴展了Queue。
在以下示例程序中,隊列用于實現倒數計時器,隊列預先加載了從命令行上指定的數字到0的所有整數值,按降序排列,然后,從隊列中刪除值并以一秒的間隔打印。該程序是人為的,因為在不使用隊列的情況下執行相同的操作會更自然,但它說明了在后續處理之前使用隊列來存儲元素。
import java.util.*; public class Countdown { public static void main(String[] args) throws InterruptedException { int time = Integer.parseInt(args[0]); Queuequeue = new LinkedList (); for (int i = time; i >= 0; i--) queue.add(i); while (!queue.isEmpty()) { System.out.println(queue.remove()); Thread.sleep(1000); } } }
在以下示例中,優先級隊列用于對元素集合進行排序,同樣,這個程序是人為的,因為沒有理由使用它來支持集合中提供的排序方法,但它說明了優先級隊列的行為。
static上一篇:List接口 下一篇:Deque接口List heapSort(Collection c) { Queue queue = new PriorityQueue (c); List result = new ArrayList (); while (!queue.isEmpty()) result.add(queue.remove()); return result; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73378.html
集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨立于其表示的細節來操縱集合,核心集合接口是Java集合框架的基礎,如下圖所示,核心集合接口形成層次結構。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請注意,層次結構...
Deque接口 通常讀作deck,deque是雙端隊列,雙端隊列是元素的線性集合,支持在兩個端點處插入和移除元素,Deque接口是比Stack和Queue更豐富的抽象數據類型,因為它同時實現堆棧和隊列。Deque接口定義了訪問Deque實例兩端元素的方法,提供了插入、移除和檢查元素的方法,ArrayDeque和LinkedList等預定義類實現了Deque接口。 請注意,Deque接口既可以用作后...
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...
摘要:前言今天,我將梳理在網絡編程中很重要的一個類以及其相關的類。這類主機通常不需要外部互聯網服務,僅有主機間相互通訊的需求。可以通過該接口獲取所有本地地址,并根據這些地址創建。在這里我們使用阻塞隊列實現主線程和打印線程之間的通信。 前言 今天,我將梳理在Java網絡編程中很重要的一個類InetAddress以及其相關的類NetworkInterface。在這篇文章中將會涉及: InetA...
摘要:最小初始化容量。它作為堆棧隊列雙端隊列的操作和的操作是一致的,只是內部的實現不同。根據元素內容查找和刪除的效率比較低,為。但是接口有對應的并發實現類類。 Queue接口的實現類 Queue接口作為隊列數據結構,java在實現的時候,直接定義了Deque接口(雙端隊列)來繼承Queue接口,并且只實現Deque接口。這樣java中的雙端隊列就囊括了隊列、雙端隊列、堆棧(Deque接口又定...
閱讀 3092·2021-09-22 15:54
閱讀 3980·2021-09-09 11:34
閱讀 1766·2019-08-30 12:48
閱讀 1160·2019-08-30 11:18
閱讀 3430·2019-08-26 11:48
閱讀 912·2019-08-23 17:50
閱讀 2118·2019-08-23 17:17
閱讀 1239·2019-08-23 17:12