日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的堆栈和队列

發布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的堆栈和队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最近一直在研究一些需要堆棧和隊列的Java代碼。 使用的選擇不是立即顯而易見的。 有一個Queue接口,但沒有明確的具體實現要使用。 還有一個Stack類,但是javadocs指出其他類“應該優先于此類使用”。 那么,您對Java中的堆棧和隊列使用哪種實現?

我發現我的經驗法則是可以將ArrayDeque類同時用于Stack和Queues,但是下面提供了更多詳細信息。

通用定義

首先,讓我們從一些定義開始。 在該詞的常用用法中,隊列是FIFO(先進先出)。 就像在郵局排隊的第一個人一樣。 堆棧為LIFO(后進先出)。 想象一堆書–您放在書堆中的最后一本書是您摘下的第一本書。

Java中的選擇

在Java中,情況稍微復雜一些,但原理相同。 有前面提到的Queue接口,該接口具有添加,刪除和查看元素的預期方法。 (實際上,這些方法有兩種形式:一種在操作失敗時引發異常,另一種返回特殊值,例如null或false;請參見此處 )。

還有一個名為Deque的Queue子接口,是“雙端隊列”的縮寫,通常稱為“ deck”。 該接口定義訪問集合兩端的元素的方法。 此功能使Deque成為隊列和堆棧實現的有用基礎。

但是,Queue和Deque都是接口,因此我們仍未找到要使用的具體實現…

候選清單:ArrayDeque和LinkedList

2個主要選擇是: ArrayDeque和LinkedList 。 Deque還有其他一些實現,例如ConcurrentLinkedDeque和LinkedBlockingDeque,以及大量的Queue實現,例如DelayQueue,LinkedBlockingDeque和PriorityQueue。 由于這些功能較為專業(而且我使用的并不多),因此我不再贅述。

ArrayDeque

從javadocs開始 ,ArrayDeque是Deque接口的可調整大小的數組實現。 除remove *,contains *和bulk操作外,大多數ArrayDeque操作均以攤銷的固定時間運行(即“一段時間內變慢”,但平均為常數),所有這些操作均以線性時間運行。 文檔指出,此類用作堆棧時,可能比Stack快,而用作隊列時,則比LinkedList快。 這條語句使我使用ArrayDeque作為堆棧和隊列的默認實現。

鏈表

LinkedList類實現List,Queue和Deque接口。 除了實現List接口之外,LinkedList類還提供統一命名的方法,以獲取,刪除和在列表的開頭和結尾插入元素。 這些操作允許將鏈接列表用作堆棧,隊列或雙端隊列。

LinkedList與ArrayDeque

那么,什么時候可以在ArrayDeque上使用LinkedList?

LinkedList實現的優點是:

  • 比ArrayDeque實現更靈活,因為它
    • 實現所有可選的列表操作。
  • 非常適合需要頻繁刪除/插入列表中間的項目(某些情況可能會導致ArrayDeque的大型數組副本)。

LinkedList實現的缺點:

  • 一般而言,在迭代項目時并不理想
  • 比ArrayDeque實現消耗更多的內存

總體

在效率方面,ArrayDeque比LinkedList在兩端進行迭代和添加/刪除操作效率更高。 因此,正如javadocs指出的那樣,通常,在用作堆棧時,ArrayDeque可能比堆棧快,而當用作隊列時,則比LinkedList快。

參考:來自Shaun Abram博客博客的JCG合作伙伴 Shaun Abram的Java堆棧和隊列 。

翻譯自: https://www.javacodegeeks.com/2013/10/stacks-and-queues-in-java.html

總結

以上是生活随笔為你收集整理的Java中的堆栈和队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。