Stack Classe

Definição

Representa uma coleção simples de objetos não genéricos (LIFO).

public ref class Stack : System::Collections::ICollection
public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : 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
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
    interface ICollection
    interface IEnumerable
[<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
type Stack = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
Public Class Stack
Implements ICollection
Public Class Stack
Implements ICloneable, ICollection
Herança
Stack
Atributos
Implementações

Exemplos

O exemplo a seguir mostra como criar e adicionar valores a uma Pilha e como exibir seus valores.

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

Comentários

A capacidade de um Stack é o número de elementos que podem Stack conter. À medida que os elementos são adicionados a um Stack, a capacidade é automaticamente aumentada conforme necessário por meio da realocação.

Importante

Não recomendamos que você use a Stack classe para um novo desenvolvimento. Em vez disso, recomendamos que você use a classe genérica System.Collections.Generic.Stack<T> . Para obter mais informações, consulte coleções não genéricas que não devem ser usadas no GitHub.

Se Count for menor que a capacidade da pilha, Push será uma O(1) operação. Se a capacidade precisar ser aumentada para acomodar o novo elemento, Push torna-se uma O(n) operação, onde n está Count. Pop é uma O(1) operação.

Stack null aceita como um valor válido e permite elementos duplicados.

Construtores

Nome Description
Stack()

Inicializa uma nova instância da Stack classe que está vazia e tem a capacidade inicial padrão.

Stack(ICollection)

Inicializa uma nova instância da Stack classe que contém elementos copiados da coleção especificada e tem a mesma capacidade inicial que o número de elementos copiados.

Stack(Int32)

Inicializa uma nova instância da Stack classe que está vazia e tem a capacidade inicial especificada ou a capacidade inicial padrão, o que for maior.

Propriedades

Nome Description
Count

Obtém o número de elementos contidos no Stack.

IsSynchronized

Obtém um valor que indica se o acesso ao Stack é sincronizado (thread safe).

SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso ao Stack.

Métodos

Nome Description
Clear()

Remove todos os objetos do Stack.

Clone()

Cria uma cópia superficial do Stack.

Contains(Object)

Determina se um elemento está no Stack.

CopyTo(Array, Int32)

Copia para Stack um unidimensional Arrayexistente, começando no índice de matriz especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEnumerator()

Retorna um IEnumerator para o Stack.

GetHashCode()

Serve como a função hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
Peek()

Retorna o objeto na parte superior do Stack sem removê-lo.

Pop()

Remove e retorna o objeto na parte superior do Stack.

Push(Object)

Insere um objeto na parte superior do Stack.

Synchronized(Stack)

Retorna um wrapper sincronizado (thread safe) para o Stack.

ToArray()

Copia a Stack matriz para uma nova.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Métodos de Extensão

Nome Description
AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

Aplica-se a

Acesso thread-safe

Membros estáticos públicos (Shared no Visual Basic) desse tipo são thread safe. Não há garantia de que quaisquer membros de instância sejam thread-safe.

Para garantir a segurança do thread, Stacktodas as operações devem ser feitas por meio do wrapper retornado pelo Synchronized(Stack) método.

Enumerar por meio de uma coleção não é intrinsecamente um procedimento thread-safe. Mesmo quando uma coleção é sincronizada, outros threads ainda podem modificar a coleção, o que faz com que o enumerador gere uma exceção. Para garantir a segurança do thread durante a enumeração, você pode bloquear a coleção durante toda a enumeração ou capturar as exceções resultantes de alterações feitas por outros threads.

Confira também