我在想如何迭代Stack
的元素,從頂部開始往下走,而不使用任何額外的內存。我相信默認iterator()
從下到上。我還注意到,Deque
有一個descendingIterator
。我一直無法找到類似於這個堆棧的任何東西。我只是想知道是否可以做到這一點,沒有什麼特別的。如果這是不可能的,那麼其他Java數據結構提供Stack
的功能並將其反向迭代(除了Deque
ofc)?反轉堆棧迭代器
反轉堆棧迭代器
回答
我想知道如何從頂部開始迭代堆棧的元素,並不需要使用任何額外的內存。
通過概念,一個stack不能那你彈出它的所有元素至少被重複。期。
這裏的主要問題是,您將這個堆棧數據結構與Java Stack
混淆,它會爲您提供來自其超類Vector
的iterator
,可能會讓您感到困惑。事實上,這是一個來自Java 1的設計問題。不鼓勵使用Vector
類,如下所述:Why is Java Vector class considered obsolete or deprecated?,並且因爲Stack
從vector
延伸,所以它的使用也是不鼓勵的。此外,在Stack
類的JavaDoc,作者現在添加此信息(emphasys礦):
LIFO堆棧操作的更完整,一致通過
Deque
接口提供和它的實現,這應該優先使用此類。
我還注意到,爲
Deque
有一個descendingIterator
...
正如評論指出,事實上,這項技術(在這種情況下,Java的)幫助您迭代在數據結構上是好的(或壞的,取決於你如何看待/使用它)。
請注意,Deque
是一個雙端隊列,可以同時用作堆棧和隊列,具體取決於您希望/需要使用它。
由於Deque
從Iterable
延伸,它應當提供的Iterator
它的元素可以使用類似元素的序列中的特定行爲,這種迭代器將訪問從第一元素到最後被訪問,想通過隊列導航。 descendingIterator
返回一個迭代器來訪問從上次到第一次的元素,如瀏覽堆棧。但是,再次考慮到這是技術帶來的好處。
如果這是不可能的,那麼其他Java數據結構提供堆棧的功能並且能夠向後迭代(除了
Deque
ofc)?
除了它的併發子,BlockingDeque
,看起來不像普通的Java接口。這是由這種設計驅動的:What does it mean to "program to an interface"?。請注意,您可以使用ArrayList
或其他結構從頭開始創建堆棧,或者使它像一個堆棧一樣運行,但仍然取決於您。
Stack
是Java 1.2之前的一個非常古老的類(和Java Collections Framework)。如果可以的話,我建議你改用Deque
,正如你所說,它已經具備了你所需要的全部功能。
OP已經知道它似乎 – Sage
@Sage OP最終問到*有什麼建議?*,這是一個有效的建議。 –
@Sage OP知道'Deque',但我更加強調'Stack'是一個非常古老的類,它可能不會從Java維護者那裏獲得任何進一步的愛。就像'Vector'和'Hashtable'一樣,它的排序不鼓勵使用(即使不是官方的'@ Deprecated')。 –
- 1. '迭代器不可忽略'C++堆棧
- 2. Java:迭代兩個堆棧
- 3. 遞歸反轉堆棧
- 4. 如何反轉堆棧?
- 5. 堆迭代器java
- 6. C++映射迭代和堆棧損壞
- 7. 嵌套的async.eachSeries堆棧迭代
- 8. 用堆棧和迭代器編寫後綴計算器
- 9. Scala:將遞歸函數轉換爲使用堆棧迭代
- 10. 反轉方法無法堆棧
- 11. 使用堆棧來反轉字符串?
- 12. 使用堆棧反轉字符串
- 13. (C++)使用堆棧反轉字符串?
- 14. 反轉從堆棧中的字符串
- 15. 使用堆棧反轉字符串
- 16. Java堆棧反省
- 17. 迭代器值從反向迭代值轉換
- 18. 爲什麼Java集轉儲堆棧上的ConcurrentModificationException異常有關Map迭代器?
- 19. 使用模板化堆棧編寫迭代器
- 20. 棧迭代python3
- 21. 替代堆棧
- 22. 從堆棧轉換堆棧arrayList
- 23. 我想實現一個隊列,將反轉堆棧和打印堆棧FIFO?
- 24. JSP Struts反向迭代器
- 25. 反向堆棧元素C++
- 26. UWSGI堆棧轉儲
- 27. 替代ZigBee堆棧
- 28. 堆棧PHP代碼?
- 29. 啓用MSVC調試迭代器時堆棧分配器訪問衝突
- 30. JSON轉換器 - 堆棧溢出
你有什麼打算?如果你試圖這樣做,那麼你不應該使用堆棧開始。 –
這似乎是一個奇怪的選擇。爲什麼在想要FIFO功能時使用FILO? – Dragondraikk
如果您明白[stack](http://en.wikipedia.org/wiki/Stack_(abstract_data_type))只給出了頂部(或底部)的項目,那麼您應該已經理解了答案。這裏的人不是燃燒的,你甚至得到了答案。看起來你的問題在考慮你使用什麼結構來實現堆棧,並利用這個結構的能力解決不同的問題。如果您將結構視爲堆棧(而不是其實現),那麼這是不可能的。如果你看到的結構是一個數組或雙鏈表,那麼這是可能的。 –