您好,登錄后才能下訂單哦!
本篇內容介紹了“Java集合Queue-ArrayDeque有什么作用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
ArrayDeque
的結構是一個循環數組,用作棧比Stack
性能優秀,用作隊列比LinkedList
要好
成員變量
因為是循環數組,所以本身就是一個數組elements
來存儲元素,并且有數組的容量;而循環意味著在插入刪除元素的時候必定有兩個方向,所以會有head
和tail
,類似于雙指針。
構造函數
分析allocateElements
,原理上和HashMap
中的計算容量的算法是差不多的
以上函數是為了找到大于等于需要長度的最小2的冪整數。
offer
add
push
可以看到所有關于新增的操作都是調用了add
相關函數,源碼的解釋也如上圖所示。
remove
pop
poll
contains
peek
擴容發生的時機在增加中有體現,當head == tail
的時候就會調用doubleCapacity
進行擴容
為什么不直接用一次System.arraycopy
來完成數組的遷移呢
如果直接一次性全部遷移就會面臨一個問題,head和tail分別指向哪里呢。
對于head,增加元素下標自減,刪除元素自增;對于tail,增加元素下標自增,刪除元素自減。
一般情況下,head指向的是頭元素,tail指向的是尾元素
基于上述兩方面的考慮,最終的遷移如圖所示。
往頭部增加元素: 那么和一開始的分析一樣,在element.length - 1
下標往小下標增加。
刪除頭部元素: 那么就是4 = 0,并且head指向5,這里的數字是指元素而不是下標
往尾部增加元素: tail正常往右移動
刪除尾部元素: 3 = 0,并且tail指向3
“Java集合Queue-ArrayDeque有什么作用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。