最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Deque基本概念和使用方法

 更新時間:2025年03月05日 11:49:12   作者:飛滕人生TYF  
Deque雙端隊列是Java?Collections?Framework的一部分,支持在兩端插入和刪除操作,它繼承自Queue接口,可以作為隊列FIFO或棧LIFO使用,本文介紹java?Deque基本概念和使用方法,感興趣的朋友一起看看吧

在 Java 中,Deque(雙端隊列)是一個支持在兩端插入和刪除的隊列。它是 Java Collections Framework 的一部分,通過接口和實現(xiàn)類提供了高效的雙端操作能力。

Deque 基礎(chǔ)概念

  • Deque雙端隊列,支持在隊列的 頭部尾部 添加、刪除、訪問元素。
  • 它繼承自 Queue 接口,是一種更加通用的數(shù)據(jù)結(jié)構(gòu)。
  • 既可以用作 隊列(FIFO),也可以用作 棧(LIFO)

接口定義

Deque 是一個接口,常用實現(xiàn)類有:

  • ArrayDeque:基于動態(tài)數(shù)組的雙端隊列實現(xiàn)。
  • LinkedList:基于雙向鏈表的雙端隊列實現(xiàn)。

常見操作分類

  • 頭部操作addFirst、removeFirst、getFirst
  • 尾部操作addLast、removeLast、getLast
  • ???????通用隊列操作offerpoll、peek

Deque 的方法詳解

1. 添加元素

在頭部添加

  • void addFirst(E e):在隊列頭部插入元素,若隊列滿則拋出異常。
  • boolean offerFirst(E e):在隊列頭部插入元素,若隊列滿返回 false。

在尾部添加

  • void addLast(E e):在隊列尾部插入元素,若隊列滿則拋出異常。
  • boolean offerLast(E e):在隊列尾部插入元素,若隊列滿返回 false

示例:

Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1); // 在頭部添加
deque.addLast(2);  // 在尾部添加
System.out.println(deque); // 輸出:[1, 2]

2. 刪除元素

從頭部刪除

  • E removeFirst():刪除并返回頭部元素,若隊列為空則拋出異常。
  • E pollFirst():刪除并返回頭部元素,若隊列為空返回 null。

從尾部刪除

  • E removeLast():刪除并返回尾部元素,若隊列為空則拋出異常。
  • E pollLast():刪除并返回尾部元素,若隊列為空返回 null。

示例:

Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);
deque.addLast(2);
deque.removeFirst(); // 刪除頭部元素
deque.removeLast();  // 刪除尾部元素
System.out.println(deque); // 輸出:[]

3. 訪問元素

訪問頭部元素

  • E getFirst():獲取但不刪除頭部元素,若隊列為空則拋出異常。
  • E peekFirst():獲取但不刪除頭部元素,若隊列為空返回 null。

訪問尾部元素

  • E getLast():獲取但不刪除尾部元素,若隊列為空則拋出異常。
  • E peekLast():獲取但不刪除尾部元素,若隊列為空返回 null。 示例:
Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);
deque.addLast(2);
System.out.println(deque.getFirst()); // 輸出:1
System.out.println(deque.getLast());  // 輸出:2

4. 棧操作(LIFO)

  • void push(E e):將元素壓入棧頂(相當(dāng)于 addFirst)。
  • E pop():移除并返回棧頂元素(相當(dāng)于 removeFirst)。

示例:

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1); // 壓入棧頂
stack.push(2);
System.out.println(stack.pop()); // 彈出棧頂元素,輸出:2
System.out.println(stack.pop()); // 輸出:1

5. 隊列操作(FIFO)

  • boolean offer(E e):將元素添加到隊列尾部(相當(dāng)于 offerLast)。
  • E poll():移除并返回隊列頭部元素(相當(dāng)于 pollFirst)。
  • E peek():獲取但不刪除隊列頭部元素(相當(dāng)于 peekFirst)。

示例:

Deque<Integer> queue = new ArrayDeque<>();
queue.offer(1); // 添加到尾部
queue.offer(2);
System.out.println(queue.poll()); // 移除頭部元素,輸出:1
System.out.println(queue.peek()); // 獲取頭部元素,輸出:2

6. 刪除所有元素

  • void clear():清空隊列。

示例:

Deque<Integer> deque = new ArrayDeque<>();
deque.add(1);
deque.add(2);
deque.clear(); // 清空隊列
System.out.println(deque.isEmpty()); // 輸出:true

7. 檢查隊列狀態(tài)

  • boolean isEmpty():檢查隊列是否為空。
  • int size():返回隊列中元素的數(shù)量。

Deque 的實現(xiàn)類

1. ArrayDeque

  • 基于動態(tài)數(shù)組實現(xiàn)。
  • 特點(diǎn)
    • 適合用作棧和隊列。
    • 線程不安全,但效率較高。
    • 不允許存儲 null 元素。

示例:

Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);
deque.addLast(2);
System.out.println(deque); // 輸出:[1, 2]

2. LinkedList

  • 基于雙向鏈表實現(xiàn)。
  • 特點(diǎn)
    • 支持隊列和棧操作。
    • 允許存儲 null 元素。
    • 適合頻繁插入和刪除操作的場景。

示例:

Deque<Integer> deque = new LinkedList<>();
deque.addFirst(1);
deque.addLast(2);
System.out.println(deque); // 輸出:[1, 2]

常見應(yīng)用場景

1. 棧實現(xiàn)(LIFO 模式)

Deque 提供了 pushpop 方法,可以方便地模擬棧。

示例:

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.push(2);
System.out.println(stack.pop()); // 輸出:2
System.out.println(stack.pop()); // 輸出:1

2. 隊列實現(xiàn)(FIFO 模式)

Deque 提供了 offerpoll 方法,可以模擬隊列操作。

示例:

Deque<Integer> queue = new ArrayDeque<>();
queue.offer(1);
queue.offer(2);
System.out.println(queue.poll()); // 輸出:1
System.out.println(queue.poll()); // 輸出:2

3. 滑動窗口

Deque 可以用作維護(hù)滑動窗口的數(shù)據(jù)結(jié)構(gòu),例如最大值或最小值的計算。

4. 雙端處理

Deque 支持從兩端同時處理數(shù)據(jù),例如支持同時從頭尾訪問元素的算法(如回文檢查)。

總結(jié)

方法分類常用方法描述
添加元素addFirstaddLast、offer向頭部或尾部添加元素
刪除元素removeFirstremoveLast從頭部或尾部刪除元素
訪問元素getFirst、getLast、peek獲取頭部或尾部元素,但不刪除
棧操作push、pop用作棧的 LIFO 操作
隊列操作offer、pollpeek用作隊列的 FIFO 操作
清空隊列clear刪除所有元素

推薦使用場景

  • 對于簡單的?;蜿犃胁僮?,使用 ArrayDeque。
  • 對于需要頻繁插入、刪除或允許存儲 null 的場景,選擇 LinkedList。

Deque 是一個功能強(qiáng)大的雙端數(shù)據(jù)結(jié)構(gòu),在隊列和棧操作中非常靈活。根據(jù)實際需求選擇實現(xiàn)類即可。

到此這篇關(guān)于java Deque 詳解的文章就介紹到這了,更多相關(guān)java Deque 詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 中使用 JSON Schema 校驗復(fù)雜JSON數(shù)據(jù)的過程

    Spring Boot 中使用 JSON Schema 校驗復(fù)雜JSO

    在數(shù)據(jù)交換領(lǐng)域,JSON Schema 以其強(qiáng)大的標(biāo)準(zhǔn)化能力,為定義和規(guī)范 JSON 數(shù)據(jù)的結(jié)構(gòu)與規(guī)則提供了有力支持,下面給大家介紹Spring Boot 中使用 JSON Schema 校驗復(fù)雜JSON數(shù)據(jù)的過程,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

    Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

    HashMap和HashSet都是存儲在哈希桶之中,通過本文我們可以先了解一些哈希桶是什么,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本)

    SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本)

    這篇文章主要介紹了SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建

    SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建

    SpringCloud 是一套分布式系統(tǒng)的解決方案,常見的還有阿里巴巴的Dubbo,F(xiàn)ass的底層實現(xiàn)就是函數(shù)式編程,SpringCloud Function 就是Spring提供的分布式函數(shù)式編程組件,下面給大家介紹下SpringCloud?Function?SpEL注入漏洞分析,感興趣的朋友一起看看吧
    2022-04-04
  • 如何修改nacos權(quán)重報錯問題

    如何修改nacos權(quán)重報錯問題

    這篇文章主要介紹了如何修改nacos權(quán)重報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 關(guān)于java關(guān)鍵字this和super的區(qū)別和理解

    關(guān)于java關(guān)鍵字this和super的區(qū)別和理解

    這篇文章主要給大家介紹了關(guān)于java關(guān)鍵字this和super的區(qū)別和理解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 詳解SpringMVC如何進(jìn)行數(shù)據(jù)回顯

    詳解SpringMVC如何進(jìn)行數(shù)據(jù)回顯

    這篇文章主要介紹了詳解SpringMVC如何進(jìn)行數(shù)據(jù)回顯,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java讀取PHP接口數(shù)據(jù)的實現(xiàn)方法

    java讀取PHP接口數(shù)據(jù)的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava讀取PHP接口數(shù)據(jù)的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java判斷字符串是否是有效的括號(實例詳解)

    Java判斷字符串是否是有效的括號(實例詳解)

    給定一個只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效,有效字符串需要滿足:左括號必須用相同類型的右括號閉合,這篇文章主要介紹了Java判斷字符串是否是有效的括號,需要的朋友可以參考下
    2023-10-10
  • Java源碼解析之平衡二叉樹

    Java源碼解析之平衡二叉樹

    在上一章的文章中,我們講到了二叉排序樹,它很好的平衡了插入與查找的效率,但二叉排序樹如果不平衡,那么查找效率就會大大降低,今天要講的這個平衡二叉樹就是一種解決這個問題的方法.需要的朋友可以參考下
    2021-05-05

最新評論

定远县| 商城县| 伊宁市| 鱼台县| 郁南县| 辽宁省| 荃湾区| 牡丹江市| 颍上县| 纳雍县| 喀什市| 张掖市| 海淀区| 临朐县| 赤壁市| 桑植县| 贡嘎县| 高要市| 郑州市| 淮安市| 沈丘县| 临安市| 武城县| 英德市| 苏州市| 沙河市| 安岳县| 曲靖市| 昌乐县| 和田市| 鱼台县| 冀州市| 宜川县| 冷水江市| 灌云县| 长寿区| 泰兴市| 西安市| 夏津县| 平南县| 石阡县|