Stack 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示物件非泛型集合的簡單先出 (LIFO) 。
public ref class Stack : System::Collections::ICollection
public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : System.Collections.ICollection
public class Stack : ICloneable, System.Collections.ICollection
[System.Serializable]
public class Stack : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
interface ICollection
interface IEnumerable
type Stack = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
type Stack = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Stack = class
interface ICollection
interface IEnumerable
interface ICloneable
Public Class Stack
Implements ICollection
Public Class Stack
Implements ICloneable, ICollection
- 繼承
-
Stack
- 屬性
- 實作
範例
以下範例說明如何建立並新增堆疊值,以及如何顯示其值。
using System;
using System.Collections;
public class SamplesStack {
public static void Main() {
// Creates and initializes a new Stack.
Stack myStack = new Stack();
myStack.Push("Hello");
myStack.Push("World");
myStack.Push("!");
// Displays the properties and values of the Stack.
Console.WriteLine( "myStack" );
Console.WriteLine( "\tCount: {0}", myStack.Count );
Console.Write( "\tValues:" );
PrintValues( myStack );
}
public static void PrintValues( IEnumerable myCollection ) {
foreach ( Object obj in myCollection )
Console.Write( " {0}", obj );
Console.WriteLine();
}
}
/*
This code produces the following output.
myStack
Count: 3
Values: ! World Hello
*/
Imports System.Collections
Public Class SamplesStack
Public Shared Sub Main()
' Creates and initializes a new Stack.
Dim myStack As New Stack()
myStack.Push("Hello")
myStack.Push("World")
myStack.Push("!")
' Displays the properties and values of the Stack.
Console.WriteLine("myStack")
Console.WriteLine(ControlChars.Tab & "Count: {0}", myStack.Count)
Console.Write(ControlChars.Tab & "Values:")
PrintValues(myStack)
End Sub
Public Shared Sub PrintValues(myCollection As IEnumerable)
Dim obj As [Object]
For Each obj In myCollection
Console.Write(" {0}", obj)
Next obj
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' myStack
' Count: 3
' Values: ! World Hello
備註
a Stack 的容量是它 Stack 能容納的元素數量。 當元素新增至 Stack時,容量會視需要透過重新配置自動增加。
Important
不建議您將 Stack 類別用於新的開發。 相反地,我們建議您使用泛型 System.Collections.Generic.Stack<T> 類別。 如需詳細資訊,請參閱 gitHub 上不應 使用非泛型集合
若 Count 小於堆疊容量,則 Push 為操作 O(1) 。 若容量需增加以容納新元素, Push 則為運算, O(n) 其中 n 為 Count。
Pop 是一個 O(1) 操作。
Stack 接受 null 為有效值,並允許重複元素。
建構函式
| 名稱 | Description |
|---|---|
| Stack() |
初始化空的 Stack 類別的新實例,並具有預設的初始容量。 |
| Stack(ICollection) |
初始化一個包含從指定集合複製的元素,且初始容量與複製元素數量相同的類別實例 Stack 。 |
| Stack(Int32) |
初始化一個空的類別新實例,該實例 Stack 為空且擁有指定的初始容量或預設初始容量,以較大者為準。 |
屬性
| 名稱 | Description |
|---|---|
| Count |
得到包含於 的 Stack元素數量。 |
| IsSynchronized |
取得值,指出是否同步存取 Stack (線程安全)。 |
| SyncRoot |
取得一個物件,可用來同步存取 Stack。 |
方法
| 名稱 | Description |
|---|---|
| Clear() |
移除所有物件。Stack |
| Clone() |
建立 Stack的淺層複本。 |
| Contains(Object) |
判斷專案是否在 Stack中。 |
| CopyTo(Array, Int32) | |
| Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
| GetEnumerator() |
回傳 和 IEnumerator 表示 Stack。 |
| GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
| GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
| MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
| Peek() |
在不移除物件的情況下,返回頂部 Stack 的物件。 |
| Pop() |
移除並返回位於 頂部 Stack的物件。 |
| Push(Object) |
在 的頂部 Stack插入一個物件。 |
| Synchronized(Stack) |
回傳一個同步(執行緒安全)的包裝器。Stack |
| ToArray() |
將 複製 Stack 到一個新的陣列。 |
| ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
擴充方法
| 名稱 | Description |
|---|---|
| AsParallel(IEnumerable) |
啟用查詢的平行處理。 |
| AsQueryable(IEnumerable) |
將 IEnumerable 轉換成 IQueryable。 |
| Cast<TResult>(IEnumerable) |
將 IEnumerable 的項目轉換成指定的型別。 |
| OfType<TResult>(IEnumerable) |
根據指定的型別篩選 IEnumerable 的專案。 |
適用於
執行緒安全性
此類型的公用靜態 (Shared) 成員是安全線程。 任何實例成員都不保證具有執行緒安全性。
若要保證 Stack的線程安全性,所有作業都必須透過 Synchronized(Stack) 方法傳回的包裝函式來完成。
透過集合列舉本質上不是安全線程的程式。 即使集合同步處理,其他線程仍然可以修改集合,這會導致列舉值擲回例外狀況。 若要保證列舉期間的線程安全性,您可以在整個列舉期間鎖定集合,或攔截其他線程所做的變更所產生的例外狀況。