Codigos Fonte, Artigos e Dicas
C# Classe Coleção + ArrayList

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 2008 – CTRL+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();
Abraços…
Posts Relacionados
| Imprimir artigo | Este artigo foi escrito por Alexandre Santos em 26 26UTC agosto 26UTC 2009 às 23:28, e está arquivado em C# Linguagem. Siga quaisquer respostas a este artigo através do RSS 2.0. Você pode deixar uma resposta ou fazer um trackback do seu próprio site. |


há 2 anos atrás
Muito bom o post =D tava usando isso esses dias heheheh
[Reply]
há 2 anos atrás
hi,
First of all. Thanks very much for your useful post.
I just came across your blog and wanted to drop you a note telling you how impressed I was with the information you have posted here.
Please let me introduce you some info related to this post and I hope that it is useful for .Net community.
There is a good C# resource site, Have alook
http://www.csharptalk.com/2009/09/c-array.html
http://www.csharptalk.com/2009/10/creating-arrays.html
simi
[Reply]