Início > C# > Estrutura de dados das coleções do .Net (Parte 2)

Estrutura de dados das coleções do .Net (Parte 2)

23 de setembro de 2010 Deixe um comentário Go to comments
Continuando os artigos de estrutura de dados das coleções do .Net.. (veja aqui a primeira parte.)
 

Embora os arrays sejam bem funcionais, essa estrutura possui algumas limitações, por exemplo, o fato de ele armazenar somente os elementos de um tipo, ou mesmo o fato de ele alocar na inicialização o tamanho do array, sendo necessário criar um novo e copiar caso deseje expandi-lo.  Muitas vezes, em nossas aplicações queremos algo mais flexível, que permita de uma maneira fácil gerenciar esses problemas com a alocação de espaço. O .Net Framework Class Library fornece uma estrutura de coleção chamada ArrayList, esta estrutura nada mais é que um array do tipo Object, porém ele possui um método Add(), onde iremos inserir os itens e ele vai redimensionando automaticamente o array para nós.

Veja um exemplo:

ArrayList itens = new ArrayList();

itens.Add(“nelson”);

itens.Add(123);

itens.Add(0.1);

itens.Add(“fim”);

5-  Exemplo da utilização do ArrayList

Repare no exemplo acima que os dados dentro do arraylist não são do mesmo tipo, isso se deve ao método Add esperar um tipo Object, apesar de ser uma facilidade, isso tem um custo para a aplicação uma vez que temos o uso de boxing /unboxing e possíveis erros de conversão de tipo no momento de resgatar os valores armazenados (tipo não seguro). No momento em que instanciamos a classe ArrayList não estamos definindo um tamanho para a mesma,  uma vez que o ArrayList é dimensionado na inserção de elementos, porém a classe ArrayList possui uma sobrecarga no construtor que recebe a quantidade de elementos a ser alocados,  para casos que você já saiba o tamanho de seu arraylist é recomendável utilizar esta sobrecarga com o tamanho inicial do array, evitando assim o alguns redimensionamento internos do array.

 Veja como esta implementado o método Add() do ArrayList:

public virtual int Add(object value)
{    if (this._size == this._items.Length)
    {
        this.EnsureCapacity(this._size + 1);
    }
    this._items[this._size] = value;
    this._version++;
    return this._size++;
}

6-  Implementação do método Add() da classe ArrayList

 

 

 

Nota: O boxing/Unboxing do ArrayList pode atrapalhar a performance do seu aplicativo ao usar uma grande quantidade de itens, pois irão ocorrer muitas operações de leitura/escrita além das verificações e redimensionamentos do array, para solucionar este problema o .Net possui um recurso de Generics e este pode ser usado para vários tipos de coleções, iremos falar nele no próximo artigo.

Abraço e bom final de semana.
 
Nelson Borges.

 

Categorias:C#
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: