Java雙端隊列


*Java雙端隊列的知識

Deque 接口是 double ended queue 的縮寫,即雙端隊列,支持在隊列的兩端插入和刪除元素,繼承 Queue接口。
public interface Deque extends Queue

Deque 的 12 種方法總結如下:

  • 插入:
    • 如果操作失敗則拋出異常
      • void addFirst(Object e)
      • void addLast(Object e)
    • 如果操作失敗則返回一個特殊值(null 或 false)
      • boolean offerFirst(Object e)
      • boolean offerLast(Object e);
  • 刪除:
    • 如果操作失敗則拋出異常
      • Object removeFirst()
      • Object removeLast()
    • 如果操作失敗則返回一個特殊值(null 或 false)
      • Object pollFirst()
      • Object pollLast()
  • 獲取:
    • 如果操作失敗則拋出異常
      • Object getFirst()
      • Object getLast()
    • 如果操作失敗則返回一個特殊值(null 或 false)
      • Object peekFirst()
      • Object peekLast()

Deque 與 List 不同,該接口不支持下標訪問元素。Deque 的實現並不嚴格要求禁止插入元素 null,但強烈鼓勵不插入 null。任何 Deque 的實現都強烈鼓勵不要插入 null,因為 null 是多種方法作為一種特殊返回值來表示 Deque 為空。

ArrayDeque 和 LinkedList 類是 Deque 接口的兩個實現類:

  • ArrayDeque 類由數組支持。適合當作堆棧使用。
  • LinkedList 類由鏈表支持。適合當作FIFO隊列使用。

*代碼

import java.util.Deque; import java.util.LinkedList; 
public class DequeTest { 
    public static void main(String[] args) { Deque<String> deque = new LinkedList<String>(); deque.add("d"); deque.add("e"); deque.add("f"); //從隊首取出元素,不會刪除
        System.out.println("隊首取出元素:"+deque.peek()); System.out.println("隊列為:"+deque); //從隊首加入元素(隊列有容量限制時用,無則用addFirst)
        deque.offerFirst("c"); System.out.println("隊首加入元素后為:"+deque); //從隊尾加入元素(隊列有容量限制時用,無則用addLast)
        deque.offerLast("g"); System.out.println("隊尾加入元素后為:"+deque); //隊尾加入元素
        deque.offer("h"); System.out.println("隊尾加入元素后為:"+deque); //獲取並移除隊列第一個元素,pollFirst()也是,區別在於隊列為空時,removeFirst會拋出NoSuchElementException異常,后者返回null
 deque.removeFirst(); System.out.println("獲取並移除隊列第一個元素后為:"+deque); //獲取並移除隊列第一個元素,此方法與pollLast 唯一區別在於隊列為空時,removeLast會拋出NoSuchElementException異常,后者返回null
 deque.removeLast(); System.out.println("獲取並移除隊列最后一個元素后為:"+deque); //獲取隊列第一個元素.此方法與 peekFirst 唯一的不同在於:如果此雙端隊列為空,它將拋出NoSuchElementException,后者返回null
        System.out.println("獲取隊列第一個元素為:"+deque.getFirst()); System.out.println("獲取隊列第一個元素后為:"+deque); //獲取隊列最后一個元素.此方法與 peekLast 唯一的不同在於:如果此雙端隊列為空,它將拋出NoSuchElementException,后者返回null
        System.out.println("獲取隊列最后一個元素為:"+deque.getLast()); System.out.println("獲取隊列第一個元素后為:"+deque); //循環獲取元素並在隊列移除元素
        while(deque.size()>0){ System.out.println("獲取元素為:"+ deque.pop()+" 並刪除"); } System.out.println("隊列為:"+deque); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM