Stack Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje prostą niegeneracyjną kolekcję obiektów typu last-in-first-out (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
- Dziedziczenie
-
Stack
- Atrybuty
- Implementuje
Przykłady
W poniższym przykładzie pokazano, jak utworzyć i dodać wartości do stosu oraz jak wyświetlić jego wartości.
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
Uwagi
Pojemność obiektu Stack to liczba elementów, które Stack mogą być przechowywane. Ponieważ elementy są dodawane do Stackelementu , pojemność jest automatycznie zwiększana zgodnie z wymaganiami za pośrednictwem lokalizacji rzeczywistej.
Ważna
Nie zalecamy używania klasy Stack do nowego programowania. Zamiast tego zalecamy użycie klasy ogólnej System.Collections.Generic.Stack<T> . Aby uzyskać więcej informacji, zobacz Kolekcje inne niż ogólne nie powinny być używane w usłudze GitHub.
Jeśli Count jest mniejsza niż pojemność stosu, Push jest operacją O(1) . Jeśli pojemność musi zostać zwiększona, aby pomieścić nowy element, Push stanie się operacją O(n) , gdzie n to Count.
Pop jest operacją O(1) .
Stack
null akceptuje jako prawidłową wartość i zezwala na zduplikowane elementy.
Konstruktory
| Nazwa | Opis |
|---|---|
| Stack() |
Inicjuje nowe wystąpienie klasy Stack, która jest pusta i ma domyślną pojemność początkową. |
| Stack(ICollection) |
Inicjuje nowe wystąpienie Stack klasy zawierające elementy skopiowane z określonej kolekcji i ma taką samą pojemność początkową jak liczba skopiowanych elementów. |
| Stack(Int32) |
Inicjuje nowe wystąpienie Stack klasy, która jest pusta i ma określoną pojemność początkową lub domyślną pojemność początkową, w zależności od tego, która z nich jest większa. |
Właściwości
| Nazwa | Opis |
|---|---|
| Count |
Pobiera liczbę elementów zawartych w obiekcie Stack. |
| IsSynchronized |
Pobiera wartość wskazującą, czy dostęp do elementu Stack jest synchronizowany (bezpieczny wątek). |
| SyncRoot |
Pobiera obiekt, który może służyć do synchronizowania dostępu do obiektu Stack. |
Metody
| Nazwa | Opis |
|---|---|
| Clear() |
Usuwa wszystkie obiekty z obiektu Stack. |
| Clone() |
Tworzy płytkią kopię Stack. |
| Contains(Object) |
Określa, czy element znajduje się w Stack. |
| CopyTo(Array, Int32) |
Kopiuje element Stack do istniejącego jednowymiarowego Arrayobiektu , zaczynając od określonego indeksu tablicy. |
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
| GetEnumerator() |
Zwraca wartość IEnumerator dla elementu Stack. |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| Peek() |
Zwraca obiekt w górnej części obiektu Stack bez jego usuwania. |
| Pop() |
Usuwa i zwraca obiekt w górnej części obiektu Stack. |
| Push(Object) |
Wstawia obiekt w górnej części obiektu Stack. |
| Synchronized(Stack) |
Zwraca zsynchronizowaną otokę (bezpieczną wątkową) dla elementu Stack. |
| ToArray() |
Kopiuje element Stack do nowej tablicy. |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Metody rozszerzania
| Nazwa | Opis |
|---|---|
| AsParallel(IEnumerable) |
Umożliwia równoległość zapytania. |
| AsQueryable(IEnumerable) |
Konwertuje IEnumerable na IQueryable. |
| Cast<TResult>(IEnumerable) |
Rzutuje elementy IEnumerable do określonego typu. |
| OfType<TResult>(IEnumerable) |
Filtruje elementy IEnumerable na podstawie określonego typu. |
Dotyczy
Bezpieczeństwo wątkowe
Publiczne statyczne (Shared w Visual Basic) składowe tego typu są bezpieczne wątkowo. Członkowie instancji nie mają gwarancji bezpieczeństwa wątkowego.
Aby zagwarantować bezpieczeństwo wątków Stack, należy wykonać wszystkie operacje za pośrednictwem otoki zwróconej przez metodę Synchronized(Stack).
Wyliczanie za pośrednictwem kolekcji nie jest wewnętrznie procedurą bezpieczną wątkowo. Nawet w przypadku synchronizacji kolekcji inne wątki nadal mogą modyfikować kolekcję, co powoduje zgłoszenie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, możesz zablokować kolekcję podczas całego wyliczenia lub przechwycić wyjątki wynikające ze zmian wprowadzonych przez inne wątki.