Class Stack<E>
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractList<E>
-
- java.util.Vector<E>
-
- java.util.Stack<E>
-
-
實現的所有接口
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,List<E>
,RandomAccess
public class Stack<E> extends Vector<E>
Stack
類表示后進先出(LIFO)對象堆棧。它通過五個操作擴展了類Vector
,允許將向量視為堆棧。提供了通常的push
和pop
操作,以及在堆棧頂部項目中的peek
的方法,用於測試堆棧是否為empty
的方法,以及用於項目的堆棧的方法以及發現它的距離search
是從頂部。首次創建堆棧時,它不包含任何項目。
Deque
接口及其實現提供了更完整和一致的LIFO堆棧操作集,應優先使用此類。 例如:Deque<Integer> stack = new ArrayDeque<Integer>();
-
繼承關系圖👇
由於Vector由於效率問題已經被棄用,因此繼承Vector的Stack也存在效率問題,故不推薦使用。
再一個原因是Deque雙端隊列可以實現多種數據結構,完全可以模擬成棧的結構。Deque上進上出,上進下出,甚至下進上出,非常上流,只有你想不到,沒有我Deque做不到的。
ArrayDeque與LinkList區別:
ArrayDeque:
- 數組結構
- 插入元素不能為null
- 無法確定數據量時,后期擴容會影響效率
LinkList:
- 鏈表結構
- 插入元素能為null
- 無法確定數據量時,有更好表現
Interface Deque<E>
-
參數類型
E
- 此雙端隊列中保留的元素類型 -
All Superinterfaces:
Collection<E>
,Iterable<E>
,Queue<E>
-
All Known Subinterfaces:
BlockingDeque<E>
-
所有已知實現類:
ArrayDeque
,ConcurrentLinkedDeque
,LinkedBlockingDeque
,LinkedList
public interface Deque<E> extends Queue<E>
-
線性集合,支持兩端插入和移除元素。名稱deque是“雙端隊列”的縮寫,通常發音為“deck”。大多數
Deque
實現對它們可能包含的元素數量沒有固定限制,但此接口支持容量限制的deques以及沒有固定大小限制的deques。 -
此接口定義了訪問雙端隊列兩端元素的方法。 提供了插入,移除和檢查元素的方法。 這些方法中的每一種都以兩種形式存在:一種在操作失敗時拋出異常,另一種返回特殊值(
null
或false
,具體取決於操作)。 后一種形式的插入操作專門設計用於容量限制的Deque
實現; 在大多數實現中,插入操作不會失敗。 -
此接口擴展了
Queue
接口。 當deque用作隊列時,會產生FIFO(先進先出)行為。 元素在雙端隊列的末尾添加並從頭開始刪除。 繼承自Queue
接口的方法與Deque
方法完全等效,如下表所示:Comparison of Queue and Deque methods
Queue
Method EquivalentDeque
Methodadd(e)
addLast(e)
offer(e)
offerLast(e)
remove()
removeFirst()
poll()
pollFirst()
element()
getFirst()
peek()
peekFirst()
-
Deques也可以用作LIFO(后進先出)堆棧。 應優先使用此接口,而不是舊版
Stack
。 當deque用作堆棧時,元素將從雙端隊列的開頭推出並彈出。 堆棧方法相當於Deque
方法,如下表所示:Comparison of Stack and Deque methods Stack Method Equivalent
Deque
Methodpush(e)
addFirst(e)
pop()
removeFirst()
peek()
getFirst()
-
請注意,當deque用作隊列或堆棧時,
peek
方法同樣有效; 在任何一種情況下,元素都是從雙端隊列的開頭繪制的。此界面提供了兩種刪除內部元素的方法,
removeFirstOccurrence
和removeLastOccurrence
。 -
與
List
接口不同,此接口不支持對元素的索引訪問。雖然嚴格要求
Deque
實現禁止插入null元素,但強烈建議他們這樣做。 任何用戶Deque
強烈建議實現,也允許null元素不采取插入空的能力優勢。 這是因為null
被各種方法用作特殊返回值,以指示deque為空。
Deque
實現通常不定義equals
和hashCode
方法的基於元素的版本,而是繼承類Object
基於身份的版本。 -
方法摘要
變量和類型 | 方法 | 描述 |
---|---|---|
boolean |
add(E e) |
將指定的元素插入此雙端隊列表示的隊列中(換句話說,在此雙端隊列的尾部),如果它是立即可行且不會違反容量限制,返回 true 成功時和拋出 IllegalStateException 如果當前沒有空間可用的。 |
boolean |
addAll(Collection<? extends E> c) |
在此雙端隊列的末尾添加指定集合中的所有元素,就像通過在每個 對象上調用 addLast(E) 一樣 ,按照集合的迭代器返回它們的順序。 |
void |
addFirst(E e) |
如果可以在不違反容量限制的情況下立即插入指定元素,則在此雙端隊列的前面插入指定元素,如果當前沒有可用空間,則拋出 IllegalStateException 。 |
void |
addLast(E e) |
如果可以在不違反容量限制的情況下立即插入指定元素,則在此雙端隊列的末尾插入指定元素,如果當前沒有可用空間,則拋出 IllegalStateException 。 |
boolean |
contains(Object o) |
如果此雙端隊列包含指定的元素,則返回 true 。 |
Iterator<E> |
descendingIterator() |
以相反的順序返回此雙端隊列中元素的迭代器。 |
E |
element() |
檢索但不刪除此雙端隊列表示的隊列的頭部(換句話說,此雙端隊列的第一個元素)。 |
E |
getFirst() |
檢索但不刪除此雙端隊列的第一個元素。 |
E |
getLast() |
檢索但不刪除此雙端隊列的最后一個元素。 |
Iterator<E> |
iterator() |
以適當的順序返回此雙端隊列中元素的迭代器。 |
boolean |
offer(E e) |
將指定的元素插入此雙端隊列表示的隊列中(換句話說,在此雙端隊列的尾部),如果它是立即可行且不會違反容量限制,返回 true 在成功和 false 如果當前沒有空間可用。 |
boolean |
offerFirst(E e) |
將指定元素插入此雙端隊列的前面,除非它違反容量限制。 |
boolean |
offerLast(E e) |
在此雙端隊列的末尾插入指定的元素,除非它違反容量限制。 |
E |
peek() |
檢索但不移除此雙端隊列表示的隊列的頭部(換句話說,此雙端隊列的第一個元素),如果此雙端隊列為空,則返回 null 。 |
E |
peekFirst() |
檢索但不刪除此雙端隊列的第一個元素,如果此雙端隊列為空,則返回 null 。 |
E |
peekLast() |
檢索但不刪除此雙端隊列的最后一個元素,如果此雙端隊列為空,則返回 null 。 |
E |
poll() |
檢索並刪除此雙端隊列表示的隊列的頭部(換句話說,此雙端隊列的第一個元素),如果此雙端隊列為空,則返回 null 。 |
E |
pollFirst() |
檢索並刪除此雙端隊列的第一個元素,如果此雙端隊列為空,則返回 null 。 |
E |
pollLast() |
檢索並刪除此雙端隊列的最后一個元素,如果此雙端隊列為空,則返回 null 。 |
E |
pop() |
從此雙端隊列表示的堆棧中彈出一個元素。 |
void |
push(E e) |
如果可以在不違反容量限制的情況下立即執行此操作, IllegalStateException 到此雙端隊列表示的堆棧(換句話說,在此雙端隊列的頭部),如果當前沒有可用空間則拋出 IllegalStateException 。 |
E |
remove() |
檢索並刪除此雙端隊列表示的隊列的頭部(換句話說,此雙端隊列的第一個元素)。 |
boolean |
remove(Object o) |
從此雙端隊列中刪除第一次出現的指定元素。 |
E |
removeFirst() |
檢索並刪除此雙端隊列的第一個元素。 |
boolean |
removeFirstOccurrence(Object o) |
從此雙端隊列中刪除第一次出現的指定元素。 |
E |
removeLast() |
檢索並刪除此雙端隊列的最后一個元素。 |
boolean |
removeLastOccurrence(Object o) |
從此雙端隊列中刪除最后一次出現的指定元素。 |
int |
size() |
返回此雙端隊列中的元素數。 |