成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java? 教程(Queue接口)

RayKr / 2632人閱讀

Queue接口

Queue是在處理之前保存元素的集合,除了基本的Collection操作外,隊列還提供額外的插入、刪除和檢查操作,Queue接口如下。

public interface Queue extends Collection {
    E element();
    boolean offer(E e);
    E peek();
    E poll();
    E remove();
}

每個Queue方法都有兩種形式:(1)如果操作失敗則拋出異常,(2)如果操作失敗,則返回特殊值(nullfalse,具體取決于操作),接口的常規(guī)結構如下表所示。

操作類型 拋出異常 返回特殊值
插入 add(e) offer(e)
移除 remove() poll()
檢查 element() peek()

隊列通常(但不一定)以FIFO(先進先出)方式對元素進行排序,優(yōu)先級隊列除外,它們根據(jù)元素的值對元素進行排序 — 有關詳細信息,請參閱“對象排序”部分。無論使用什么排序,隊列的頭部都是通過調用removepoll移除的元素。在FIFO隊列中,所有新元素都插入隊列的尾部,其他類型的隊列可能使用不同的放置規(guī)則,每個Queue實現(xiàn)都必須指定其排序屬性。

Queue實現(xiàn)可以限制它所擁有的元素數(shù)量,這樣的隊列被稱為有界,java.util.concurrent中的某些Queue實現(xiàn)是有界的,但java.util中的實現(xiàn)不是。

QueueCollection繼承的add方法插入一個元素,除非它違反了隊列的容量限制,在這種情況下它會拋出IllegalStateException。offer方法,僅用于有界隊列,與add不同之處僅在于它通過返回false來表示插入元素失敗。

removepoll方法都移除并返回隊列的頭部,確切地移除哪個元素是隊列的排序策略的函數(shù),僅當隊列為空時,removepoll方法的行為才有所不同,在這些情況下,remove拋出NoSuchElementException,而poll返回null。

elementpeek方法返回但不移除隊列的頭部,它們之間的差異與removepoll的方式完全相同:如果隊列為空,則element拋出NoSuchElementException,而peek返回null。

隊列實現(xiàn)通常不允許插入null元素,為實現(xiàn)Queue而進行了改進的LinkedList實現(xiàn)是一個例外,由于歷史原因,它允許null元素,但是你應該避免利用它,因為nullpollpeek方法用作特殊的返回值。

隊列實現(xiàn)通常不定義equalshashCode方法的基于元素的版本,而是從Object繼承基于標識的版本。

Queue接口不定義阻塞隊列方法,這在并發(fā)編程中很常見,這些等待元素出現(xiàn)或空間可用的方法在java.util.concurrent.BlockingQueue接口中定義,該接口擴展了Queue

在以下示例程序中,隊列用于實現(xiàn)倒數(shù)計時器,隊列預先加載了從命令行上指定的數(shù)字到0的所有整數(shù)值,按降序排列,然后,從隊列中刪除值并以一秒的間隔打印。該程序是人為的,因為在不使用隊列的情況下執(zhí)行相同的操作會更自然,但它說明了在后續(xù)處理之前使用隊列來存儲元素。

import java.util.*;

public class Countdown {
    public static void main(String[] args) throws InterruptedException {
        int time = Integer.parseInt(args[0]);
        Queue queue = 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)先級隊列用于對元素集合進行排序,同樣,這個程序是人為的,因為沒有理由使用它來支持集合中提供的排序方法,但它說明了優(yōu)先級隊列的行為。

static  List heapSort(Collection c) {
    Queue queue = new PriorityQueue(c);
    List result = new ArrayList();

    while (!queue.isEmpty())
        result.add(queue.remove());

    return result;
}
上一篇:List接口 下一篇:Deque接口

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/73378.html

相關文章

  • Java? 教程(集合接口

    集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨立于其表示的細節(jié)來操縱集合,核心集合接口是Java集合框架的基礎,如下圖所示,核心集合接口形成層次結構。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請注意,層次結構...

    elisa.yang 評論0 收藏0
  • Java? 教程(Deque接口

    Deque接口 通常讀作deck,deque是雙端隊列,雙端隊列是元素的線性集合,支持在兩個端點處插入和移除元素,Deque接口是比Stack和Queue更豐富的抽象數(shù)據(jù)類型,因為它同時實現(xiàn)堆棧和隊列。Deque接口定義了訪問Deque實例兩端元素的方法,提供了插入、移除和檢查元素的方法,ArrayDeque和LinkedList等預定義類實現(xiàn)了Deque接口。 請注意,Deque接口既可以用作后...

    lastSeries 評論0 收藏0
  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續(xù)版本中引入的改進。 Java教程是希望使用Java編程語言創(chuàng)建應用程序的程序員的實用指南,其中包括數(shù)百個完整的工作示例和數(shù)十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發(fā)軟件并使用...

    lifesimple 評論0 收藏0
  • 重拾Java Network Programming(二)InetAddress

    摘要:前言今天,我將梳理在網絡編程中很重要的一個類以及其相關的類。這類主機通常不需要外部互聯(lián)網服務,僅有主機間相互通訊的需求。可以通過該接口獲取所有本地地址,并根據(jù)這些地址創(chuàng)建。在這里我們使用阻塞隊列實現(xiàn)主線程和打印線程之間的通信。 前言 今天,我將梳理在Java網絡編程中很重要的一個類InetAddress以及其相關的類NetworkInterface。在這篇文章中將會涉及: InetA...

    daryl 評論0 收藏0
  • Java中的Queue與Deque

    摘要:最小初始化容量。它作為堆棧隊列雙端隊列的操作和的操作是一致的,只是內部的實現(xiàn)不同。根據(jù)元素內容查找和刪除的效率比較低,為。但是接口有對應的并發(fā)實現(xiàn)類類。 Queue接口的實現(xiàn)類 Queue接口作為隊列數(shù)據(jù)結構,java在實現(xiàn)的時候,直接定義了Deque接口(雙端隊列)來繼承Queue接口,并且只實現(xiàn)Deque接口。這樣java中的雙端隊列就囊括了隊列、雙端隊列、堆棧(Deque接口又定...

    zhangrxiang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<