• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java隊列

    Java隊列

     

     

    隊列是只能在其上執行操作的對象的集合兩端的隊列。

     

    隊列有兩個末端,稱為頭和尾。

     

    在簡單隊列中,對象被添加到尾部并從頭部刪除并首先刪除首先添加的對象。

     

    Java Collections Framework支持以下類型的隊列。

     

    • 簡單的隊列允許在尾部插入和從頭部移除。

     

    • 優先級隊列為每個元素分配優先級,并允許從隊列中刪除具有最高優先級的元素。

     

    • 延遲隊列向每個元素添加延遲,并僅在其延遲已過去時刪除該元素。

     

    • 雙端隊列允許其元件從頭部和尾部插入和移除。

     

    • 阻塞隊列阻塞線程,當線程已滿時向其添加元素,當線程為空時,它阻止線程從中刪除元素。

     

    • 傳輸隊列是阻塞隊列,其中對象的切換發生在生產者線程和消費者線程之間。

     

    • 阻塞雙端隊列是雙端隊列和阻塞隊列的組合。

     

     

    隊列的簡介

     

    • 隊列可以定義為有序列表,它允許在一端執行插入操作,稱為REAR,刪除操作在另一端執行,稱為FRONT。

     

    • 隊列被稱為先進先出列表。

     

    • 例如,排隊等候鐵路車票的人隊列。

     

     

     

    隊列的應用

     

    由于隊列以先進先出的方式執行操作,這對于操作的排序是相當公平的。 隊列的各種應用如下所述。

     

    • 隊列被廣泛用作單個共享資源(如打印機,磁盤,CPU)的等待列表。

     

    • 隊列用于異步數據傳輸(例如,數據不以兩個進程之間的相同速率傳輸)。 管道,文件IO,套接字。

     

    • 隊列在大多數應用程序中用作緩沖區,如MP3媒體播放器,CD播放器等。

     

    • 隊列用于維護媒體播放器中的播放列表,以便添加和刪除播放列表中的歌曲。

     

    • 隊列在操作系統中用于處理中斷。

     

    時間復雜性

     

    時間復雜性

    訪問

    搜索

    插入

    刪除

    平均情況

    θ(n)

    θ(n)

    θ(1)

    θ(1)

    最壞情況

    θ(n)

    θ(n)

    θ(1)

    θ(1)

     

     

    簡單隊列

     

    簡單隊列由 Queue 接口的實例表示。

     

    隊列允許您執行三個基本操作:

     

    • 從尾部添加元素

     

    • 從其頭部移除元素

     

    • 在元素頂部審查

     

    Queue接口為三個操作中的每一個定義了兩個方法。如果操作不可能,一個方法拋出異常,另一個方法方法返回false或null以指示失敗。

     

    方法

    描述

    boolean add(E e)

    如果可能,向隊列中添加一個元素。否則,它拋出異常。

    boolean offer(E e)

    如果不能添加元素,則將元素添加到隊列中,而不拋出異常。 它在失敗時返回false,在成功時返回true。

    E remove()

    刪除隊列的頭。如果隊列為空,它會拋出異常。此方法返回已移除的項目。

    E poll()

    從隊列中刪除元素。如果隊列為空而不是拋出異常,則返回null。

    Eelement()

    偷看隊列的頭,而不從隊列中刪除它。 如果隊列為空,它會拋出異常。

    E peek()

    查看隊列,如果隊列為空而不是拋出異常,則返回null。

     

    LinkedList和PriorityQueue是Queue接口的兩個實現類。LinkedList還實現了List接口。

     

    例子

     

    以下代碼顯示如何將鏈表用作FIFO隊列。

     

    import java.util.LinkedList;
    import java.util.NoSuchElementException;
    import java.util.Queue;
    
    public class Main {
      public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.add("Java");
        // offer() will work the same as add()
        queue.offer("SQL");
        queue.offer("CSS");
        queue.offer("XML");
    
        System.out.println("Queue: " + queue);
    
        // Let"s remove elements until the queue is empty
        while (queue.peek() != null) {
          System.out.println("Head  Element: " + queue.peek());
          queue.remove();
          System.out.println("Removed one  element from  Queue");
          System.out.println("Queue: " + queue);
        }
        System.out.println("queue.isEmpty(): " + queue.isEmpty());
        System.out.println("queue.peek(): " + queue.peek());
        System.out.println("queue.poll(): " + queue.poll());
        try {
          String str = queue.element();
          System.out.println("queue.element(): " + str);
          str = queue.remove();
          System.out.println("queue.remove(): " + str);
        } catch (NoSuchElementException e) {
          System.out.println("queue.remove(): Queue is  empty.");
        }
      }
    }

     

    上面的代碼生成以下結果。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏