Queue接口
Queue是在處理之前保存元素的集合,除了基本的Collection操作外,隊(duì)列還提供額外的插入、刪除和檢查操作,Queue接口如下。
public interface Queueextends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remove(); }
每個(gè)Queue方法都有兩種形式:(1)如果操作失敗則拋出異常,(2)如果操作失敗,則返回特殊值(null或false,具體取決于操作),接口的常規(guī)結(jié)構(gòu)如下表所示。
操作類型 | 拋出異常 | 返回特殊值 |
---|---|---|
插入 | add(e) | offer(e) |
移除 | remove() | poll() |
檢查 | element() | peek() |
隊(duì)列通常(但不一定)以FIFO(先進(jìn)先出)方式對元素進(jìn)行排序,優(yōu)先級隊(duì)列除外,它們根據(jù)元素的值對元素進(jìn)行排序 — 有關(guān)詳細(xì)信息,請參閱“對象排序”部分。無論使用什么排序,隊(duì)列的頭部都是通過調(diào)用remove或poll移除的元素。在FIFO隊(duì)列中,所有新元素都插入隊(duì)列的尾部,其他類型的隊(duì)列可能使用不同的放置規(guī)則,每個(gè)Queue實(shí)現(xiàn)都必須指定其排序?qū)傩浴?/p>
Queue實(shí)現(xiàn)可以限制它所擁有的元素?cái)?shù)量,這樣的隊(duì)列被稱為有界,java.util.concurrent中的某些Queue實(shí)現(xiàn)是有界的,但java.util中的實(shí)現(xiàn)不是。
Queue從Collection繼承的add方法插入一個(gè)元素,除非它違反了隊(duì)列的容量限制,在這種情況下它會拋出IllegalStateException。offer方法,僅用于有界隊(duì)列,與add不同之處僅在于它通過返回false來表示插入元素失敗。
remove和poll方法都移除并返回隊(duì)列的頭部,確切地移除哪個(gè)元素是隊(duì)列的排序策略的函數(shù),僅當(dāng)隊(duì)列為空時(shí),remove和poll方法的行為才有所不同,在這些情況下,remove拋出NoSuchElementException,而poll返回null。
element和peek方法返回但不移除隊(duì)列的頭部,它們之間的差異與remove和poll的方式完全相同:如果隊(duì)列為空,則element拋出NoSuchElementException,而peek返回null。
隊(duì)列實(shí)現(xiàn)通常不允許插入null元素,為實(shí)現(xiàn)Queue而進(jìn)行了改進(jìn)的LinkedList實(shí)現(xiàn)是一個(gè)例外,由于歷史原因,它允許null元素,但是你應(yīng)該避免利用它,因?yàn)?b>null被poll和peek方法用作特殊的返回值。
隊(duì)列實(shí)現(xiàn)通常不定義equals和hashCode方法的基于元素的版本,而是從Object繼承基于標(biāo)識的版本。
Queue接口不定義阻塞隊(duì)列方法,這在并發(fā)編程中很常見,這些等待元素出現(xiàn)或空間可用的方法在java.util.concurrent.BlockingQueue接口中定義,該接口擴(kuò)展了Queue。
在以下示例程序中,隊(duì)列用于實(shí)現(xiàn)倒數(shù)計(jì)時(shí)器,隊(duì)列預(yù)先加載了從命令行上指定的數(shù)字到0的所有整數(shù)值,按降序排列,然后,從隊(duì)列中刪除值并以一秒的間隔打印。該程序是人為的,因?yàn)樵诓皇褂藐?duì)列的情況下執(zhí)行相同的操作會更自然,但它說明了在后續(xù)處理之前使用隊(duì)列來存儲元素。
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); } } }
在以下示例中,優(yōu)先級隊(duì)列用于對元素集合進(jìn)行排序,同樣,這個(gè)程序是人為的,因?yàn)闆]有理由使用它來支持集合中提供的排序方法,但它說明了優(yōu)先級隊(duì)列的行為。
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; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/73378.html
集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨(dú)立于其表示的細(xì)節(jié)來操縱集合,核心集合接口是Java集合框架的基礎(chǔ),如下圖所示,核心集合接口形成層次結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請注意,層次結(jié)構(gòu)...
Deque接口 通常讀作deck,deque是雙端隊(duì)列,雙端隊(duì)列是元素的線性集合,支持在兩個(gè)端點(diǎn)處插入和移除元素,Deque接口是比Stack和Queue更豐富的抽象數(shù)據(jù)類型,因?yàn)樗瑫r(shí)實(shí)現(xiàn)堆棧和隊(duì)列。Deque接口定義了訪問Deque實(shí)例兩端元素的方法,提供了插入、移除和檢查元素的方法,ArrayDeque和LinkedList等預(yù)定義類實(shí)現(xiàn)了Deque接口。 請注意,Deque接口既可以用作后...
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實(shí)踐沒有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...
摘要:前言今天,我將梳理在網(wǎng)絡(luò)編程中很重要的一個(gè)類以及其相關(guān)的類。這類主機(jī)通常不需要外部互聯(lián)網(wǎng)服務(wù),僅有主機(jī)間相互通訊的需求??梢酝ㄟ^該接口獲取所有本地地址,并根據(jù)這些地址創(chuàng)建。在這里我們使用阻塞隊(duì)列實(shí)現(xiàn)主線程和打印線程之間的通信。 前言 今天,我將梳理在Java網(wǎng)絡(luò)編程中很重要的一個(gè)類InetAddress以及其相關(guān)的類NetworkInterface。在這篇文章中將會涉及: InetA...
摘要:最小初始化容量。它作為堆棧隊(duì)列雙端隊(duì)列的操作和的操作是一致的,只是內(nèi)部的實(shí)現(xiàn)不同。根據(jù)元素內(nèi)容查找和刪除的效率比較低,為。但是接口有對應(yīng)的并發(fā)實(shí)現(xiàn)類類。 Queue接口的實(shí)現(xiàn)類 Queue接口作為隊(duì)列數(shù)據(jù)結(jié)構(gòu),java在實(shí)現(xiàn)的時(shí)候,直接定義了Deque接口(雙端隊(duì)列)來繼承Queue接口,并且只實(shí)現(xiàn)Deque接口。這樣java中的雙端隊(duì)列就囊括了隊(duì)列、雙端隊(duì)列、堆棧(Deque接口又定...
閱讀 3171·2021-09-22 15:54
閱讀 4097·2021-09-09 11:34
閱讀 1832·2019-08-30 12:48
閱讀 1220·2019-08-30 11:18
閱讀 3514·2019-08-26 11:48
閱讀 976·2019-08-23 17:50
閱讀 2181·2019-08-23 17:17
閱讀 1312·2019-08-23 17:12