VB .NET - Apresentando a classe Queue (Fila)
Neste artigo vou abordar os principais conceitos sobre filas representadas pela classe Queue. |
Vamos começar o artigo definindo o que são filas.
A classe Queue representa uma coleção de objetos FIRST IN, FIRST OUT (FIFO) enfileirados , ou seja o primeiro que entra é o primeiro que sai.
Essa classe implementa uma fila como uma matriz circular usando o método Queue() para inicializar uma nova instância da classe que será vazia, e, irá possuir uma capacidade inicial e um fator de crescimento.
A capacidade de uma fila é o número de elementos que a fila pode conter. Conforme os elementos são adicionados a uma fila, a capacidade é aumentada automaticamente conforme necessário através da realocação.
Nota: A capacidade pode ser diminuída
através do método TrimToSize().
O fator de crescimento é o número pelo que a capacidade atual é
multiplicada quando uma maior capacidade for necessária. Ele é determinado quando a fila é construída; o fator de
crescimento padrão é 2.0, assim, capacidade de uma fila aumentará sempre, pelo
menos, a um mínimo de quatro, independentemente do fator de crescimento.
Uma fila com um fator de crescimento igual a 1,0 irá sempre aumentar em capacidade de um valor igual a 4 quando uma capacidade maior for requerida.
Quando usar fila ?
Quando você precisar usar um armazenamento temporário de informações;
Quando você desejar descartar um elemento depois de recuperar seu valor;
Se você precisar acessar as informações na mesma ordem em que elas estão armazenadas na coleção.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community e clique em New Project;
Selecione a linguagem Visual Basic e o template Console Application;
Informe o nome da solução como Filas clique no botão OK;
Criando e tratando Filas
Dim minhaFila as new Queue()
Objetos armazenados numa fila são inseridos numa extremidade e removidos a partir de outra extremidade: (FIFO)
Na figura temos os métodos :
Enqueue() - que adiciona objetos no fim da fila (Queue)
Dequeue() - que remove e retorna objetos do início da fila (Queue)
Dim minhaFila
as new Queue()
minhaFila.Enqueue("Macoratti")
minhaFila.Enqueue("Quase")
minhaFila.Enqueue("Tudo para")
minhaFila.Enqueue("Visual basic")
Para remover e exibir objetos da fila podemos usar o seguinte código:
Console.WriteLine("(Dequeue) {0}", minhaFila.Dequeue())
Console.WriteLine("(Dequeue) {0}", minhaFila.Dequeue())
Console.WriteLine("(Dequeue) {0}", minhaFila.Dequeue())
Console.WriteLine("(Dequeue) {0}", minhaFila.Dequeue())
Observe que não usamos o método Add para incluir um objeto na fila mas sim o método Enqueue.
Para acessar um objeto na fila não usamos índice nem chave ; simplesmente recuperamos o primeiro da fila e depois o próximo e assim por diante. Usamos para isto o método Dequeue.
Esse método não só obtém o objeto da fila mas também remove o objeto da coleção. Assim ao chamar o método novamente você pega o próximo objeto.
Podemos também exibir os objetos contidos na fila usando um laço for/next , neste caso os objetos são apenas exibidos e não removidos:
For Each elemento As String
In minhaFila
Console.WriteLine(elemento)
Next
Você pode comparar a classe Queue com as pessoas que estão esperando em uma fila. A primeira pessoa que chega é a primeira a ser atendida , toda pessoa que chega é atendida na ordem de chegada.
Este mecanismo é chamado FIFO : first in first out (primeiro a chegar, primeiro a sair).
Esta classe permite tratar coleções de objetos fracamente tipados que são ordenadas pela ordem no qual eles são incluídos na coleção.
O código abaixo mostra como incluímos e acessamos objetos em uma fila:
Dim cliente As New Queue cliente.Enqueue(New Clientes("Macoratti", "macoratti@yahoo.com")) cliente.Enqueue(New Clientes("Jefferson", "jeff123@yahoo.com")) Dim primeiro As Clientes = cliente.Dequeue Dim segundo As Clientes = cliente.Dequeue Console.WriteLine(primeiro.Nome) Console.WriteLine(segundo.Nome) Console.ReadLine() |
O método Peek() retorna o objeto do início da fila sem removê-lo.
O método Contains() determina se um elemento esta em uma fila.
Exemplo:
Dim queueLista As New Queue queueLista.Enqueue("Dom") queueLista.Enqueue("Seg") queueLista.Enqueue("Ter") queueLista.Enqueue("Qua") queueLista.Enqueue("Qui") queueLista.Enqueue("Sex") queueLista.Enqueue("Sab") Console.WriteLine(queueLista.Peek()) If queueLista.Contains("Dom") Then Console.WriteLine("Contém Dom") Else Console.WriteLine("Não contém Dom") End If Console.ReadKey() |
O método Clear() remove todos os elementos da fila.
A propriedade Count() retorna o número de elementos da fila.
O método CopyTo() copia os elementos da fila para um array unidimensional existente no índice especificado do array.
Exemplo:
' Cria uma nova fila Dim fila As Queue(Of Integer) = New Queue(Of Integer)() fila.Enqueue(5) fila.Enqueue(10) fila.Enqueue(20) fila.Enqueue(99) 'exibe quantos elementos tem a fila Console.WriteLine("A fila contém {0} elementos.", fila.Count) ' Cria um array Dim meuArray(fila.Count - 1) As Integer ' Copia os elementos da fila para o array fila.CopyTo(meuArray, 0) 'limpando a fila fila.Clear() 'exibindo o conteúdo do array For Each elemento As Integer In meuArray Console.WriteLine(elemento) Next Console.ReadKey() |
Nota: Para garantir a segurança da thread da fila, todas as operações devem ser feitas através do invólucro retornado pelo método Synchronized().
Pegue o projeto completo aqui : Filas.zip
Porque a
palavra de Deus é viva e eficaz, e mais penetrante do que espada alguma de
dois gumes, e penetra até à divisão da alma e do espírito, e das juntas e
medulas, e é apta para discernir os pensamentos e intenções do coração.
Hebreus 4:12
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: