C#

No meu último post, falamos sobre Arrays, agora você aprenderá o que é uma Classe de Coleção e qual a diferença entre ela e um Array.

Classes de Coleção derivam do namespace System.Collection , visite Object Browser do Visual Studio 2008CTRL+ALT+J, que colecionam elementos só que de uma maneira muito especial.

As classes base de coleção armazenam e retornam seus elementos como umo bjetos (object), isso quer dizer que ao contrário de um Array convencional, que você pode criar ele do tipo int e os valores são armazenados diretamente como um inteiro. Uma classe de coleção os valores sofrerão boxing (explicarei em outro post) isso quer dizer que o valor não fica na pilha mas sim no heap, na pilha fica apenas um alias para o elemento no heap, deu pra entender?

OBS: Existe classes de coleção que nem sempre usam object como tipo de elemento e que podem sim armazenar tipo-valor assim como tipo-referência, mas esse não é o nosso caso agora…

ArrayList

ArrayList é muito bom para misturar elementos além de ter características que um Array comum não tem, exemplo:

  • Para redimensionar um Array, você precisa criar um novo maior copiar os elementos para esse novo Array ou se for no caso de diminuir criar um Array menor e omitir elementos.
  • Para adicionar um elemento ou remover você terá que redimensionar, em conclusões finais você terá que seguir a teoria do que foi dito acima.

Com um ArrayList essa limitação acaba, para remover, adicionar e inserir nós usaremos métodos.

Veremos aqui alguns desses métodos e propriedades da classe de coleção ArrayList.

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace ArrayList0
{
    class Program
    {
        static void Main(string[] args)
        {
            // Primeiro criamos o nosso objeto ArrayList chamado de meuAL
            ArrayList meuAL = new ArrayList();

            // Mostramos a capacidade do nosso ArrayList, nesse caso
            // não precisamos de parênteses () porque é uma propriedade
            // e não um método
            Console.WriteLine("1- O ArrayList.Capacity é {0} \n", meuAL.Capacity);

            // Populamos o nosso ArrayList
            Console.WriteLine("2- Populando ArrayList...");
            int z = 0;
            for (int i = 5; z < i; i--)
            {
                // Repare que utilizamos um método
                // não atribuimos mais valor do elemento
                // ao indice como antes: meuAL[0] = valor
                meuAL.Add(i);
            }

            // Agora da pra perceber que a capacidade do ArrayList
            // aumentou dinâmicamente ao adicionar-mos elementos
            Console.WriteLine("\n3- O ArrayList.Capacity agora é: {0}\n", meuAL.Capacity);

            // A propriedade Count contém o número de elementos
            Console.WriteLine("4- ArrayList.Count é: {0} \n", meuAL.Count);

            // Imprimimos os valores dos elementos na tela
            for (int y = 0; y < meuAL.Count; y++)
            {
                try
                {
                    // Observe que é necessário fazer casting dos elementos
                    // isso porque os elementos armazenados no ArrayList
                    // são objetos, quando valores são inseridos com o método
                    // Add() ou Insert() eles sofrem boxing e são armazenados
                    // no heap e não na pilha
                    Console.WriteLine("O índice {0} = {1}", y, (int)meuAL[y]);
                }
                catch (Exception e)
                {
                    Console.WriteLine("\n\n Ops... Algo Errado Aconteceu!\n {0}", e);
                }
            }

            // Tiramos as Gorduras....
            meuAL.TrimToSize();
            Console.WriteLine("\n5- Tiramos as gorduras\n   Agora o ArrayList.Capacity é: {0}\n", meuAL.Capacity);

            // A propriedade Count contém o número de elementos
            Console.WriteLine("6- ArrayList.Count ainda é: {0} \n", meuAL.Count);

            // Imprimimos os valores dos elementos na tela novamente
            for (int y = 0; y < meuAL.Count; y++)
            {
                try
                {
                    Console.WriteLine("O índice {0} = {1}", y, (int)meuAL[y]);
                }
                catch (Exception e)
                {
                    Console.WriteLine("\n\n Ops... Algo Errado Aconteceu!\n {0}", e);
                }
            }
        } // END MAIN
    } // END CLASS PROGRAM
}// END NAMESPACE#

Esse foi só um exemplo! Se tiverem com tempo brinquem com o Object Browser e procurem saber como funciona os seguintes métodos, eles são bem interessantes…

  • insert();
  • remove();
  • removeAt();
  • removeRange();
  • getRange();
  • toArray();
  • sort();
  • reverse();

Object Browser

Abraços…

Posts Relacionados