亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

Deque 基礎(chǔ)概念

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

接口定義

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

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

常見操作分類

  • 頭部操作addFirst、removeFirst、getFirst
  • 尾部操作addLastremoveLast、getLast
  • ???????通用隊(duì)列操作offer、poll、peek

Deque 的方法詳解

1. 添加元素

在頭部添加

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

在尾部添加

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

示例:

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

2. 刪除元素

從頭部刪除

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

從尾部刪除

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

示例:

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

3. 訪問元素

訪問頭部元素

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

訪問尾部元素

  • E getLast():獲取但不刪除尾部元素,若隊(duì)列為空則拋出異常。
  • E peekLast():獲取但不刪除尾部元素,若隊(duì)列為空返回 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. 隊(duì)列操作(FIFO)

  • boolean offer(E e):將元素添加到隊(duì)列尾部(相當(dāng)于 offerLast)。
  • E poll():移除并返回隊(duì)列頭部元素(相當(dāng)于 pollFirst)。
  • E peek():獲取但不刪除隊(duì)列頭部元素(相當(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():清空隊(duì)列。

示例:

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

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

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

Deque 的實(shí)現(xiàn)類

1. ArrayDeque

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

示例:

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

2. LinkedList

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

示例:

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

常見應(yīng)用場景

1. 棧實(shí)現(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. 隊(duì)列實(shí)現(xiàn)(FIFO 模式)

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

示例:

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

3. 滑動(dòng)窗口

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

4. 雙端處理

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

總結(jié)

方法分類常用方法描述
添加元素addFirst、addLast、offer向頭部或尾部添加元素
刪除元素removeFirst、removeLast從頭部或尾部刪除元素
訪問元素getFirst、getLast、peek獲取頭部或尾部元素,但不刪除
棧操作push、pop用作棧的 LIFO 操作
隊(duì)列操作offerpoll、peek用作隊(duì)列的 FIFO 操作
清空隊(duì)列clear刪除所有元素

推薦使用場景

  • 對于簡單的?;蜿?duì)列操作,使用 ArrayDeque。
  • 對于需要頻繁插入、刪除或允許存儲(chǔ) null 的場景,選擇 LinkedList

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

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

相關(guān)文章

  • java實(shí)現(xiàn)圖片文字識(shí)別ocr

    java實(shí)現(xiàn)圖片文字識(shí)別ocr

    這篇文章主要介紹了java實(shí)現(xiàn)圖片文字識(shí)別ocr ,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-08-08
  • Java性能的十一個(gè)用法分享

    Java性能的十一個(gè)用法分享

    這篇文章主要介紹了Java性能的十一個(gè)用法,需要的朋友可以參考下
    2014-10-10
  • SpringBoot自定義注解如何解決公共字段填充問題

    SpringBoot自定義注解如何解決公共字段填充問題

    本文介紹了在系統(tǒng)開發(fā)中,如何使用AOP切面編程實(shí)現(xiàn)公共字段自動(dòng)填充的功能,從而簡化代碼,通過自定義注解和切面類,可以統(tǒng)一處理創(chuàng)建時(shí)間和修改時(shí)間,以及創(chuàng)建人和修改人的賦值操作
    2025-03-03
  • jmeter正則表達(dá)式的使用

    jmeter正則表達(dá)式的使用

    在jmeter中,可以利用正則表達(dá)式提取器來幫助我們完成這一動(dòng)作,本文就詳細(xì)的介紹一下應(yīng)該如何使用,感興趣的可以了解一下
    2021-11-11
  • SpringBoot3集成Quartz的示例代碼

    SpringBoot3集成Quartz的示例代碼

    Quartz由Java編寫的功能豐富的開源作業(yè)調(diào)度框架,可以集成到幾乎任何Java應(yīng)用程序中,并且能夠創(chuàng)建多個(gè)作業(yè)調(diào)度,在實(shí)際的業(yè)務(wù)中,有很多場景依賴定時(shí)任務(wù),比如常見的:訂單超時(shí)處理,業(yè)務(wù)識(shí)別和預(yù)警通知等,本文介紹了SpringBoot3如何集成Quartz
    2023-08-08
  • 解決mybatis-plus動(dòng)態(tài)數(shù)據(jù)源切換不生效的問題

    解決mybatis-plus動(dòng)態(tài)數(shù)據(jù)源切換不生效的問題

    本文主要介紹了解決mybatis-plus動(dòng)態(tài)數(shù)據(jù)源切換不生效的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • java 對稱二叉樹的判斷

    java 對稱二叉樹的判斷

    這篇文章主要介紹了java 對稱二叉樹的判斷,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Kibana的安裝和配置全過程

    Kibana的安裝和配置全過程

    Kibana是一個(gè)開源的數(shù)據(jù)分析和可視化平臺(tái),它與Elasticsearch緊密集成,提供了一個(gè)直觀的Web界面,使您可以快速地搜索、分析和可視化數(shù)據(jù),在本文中,我們將介紹如何安裝和配置Kibana
    2024-12-12
  • 如何通過Java添加水印到Word文檔

    如何通過Java添加水印到Word文檔

    這篇文章主要介紹了如何通過Java添加水印到Word文檔,水印是一種常用于各種文檔的聲明、防偽手段,一般可設(shè)置文字水印或者加載圖片作為水印。以下內(nèi)容將分享通過Java編程給Word文檔添加水印效果的方法,需要的朋友可以參考下
    2019-07-07
  • Java中ArrayList類的用法與源碼完全解析

    Java中ArrayList類的用法與源碼完全解析

    這篇文章主要介紹了Java中ArrayList類的用法與源碼完全解析,ArrayList類通過List接口實(shí)現(xiàn),是Java中引申出的一種數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2016-05-05

最新評(píng)論