Sobes.tech
Junior

Qual é a diferença entre ArrayList e List em C#?

sobes.tech IA

Resposta da IA

As diferenças entre ArrayList e List em C# são as seguintes:

  • Tipagem:

    • ArrayList armazena elementos do tipo object (coleção não tipada), o que requer conversão de tipos ao extrair elementos e reduz a segurança de tipos.
    • List<T> é uma coleção genérica (T — um tipo definido), que armazena elementos de um tipo específico, garantindo a segurança de tipos e eliminando a necessidade de conversão.
  • Desempenho:

    • Adicionar e extrair elementos em ArrayList pode ser mais lento devido à necessidade de boxing e unboxing de tipos valor.
    • List<T> geralmente é mais rápido, especialmente para tipos valor, pois não há boxing/unboxing.
  • Segurança de tipos:

    • ArrayList pode conter elementos de tipos diferentes, o que pode causar erros em tempo de execução.
    • List<T> fornece segurança de tipos em tempo de compilação.
  • Implementação:

    • ArrayList encontra-se no espaço de nomes System.Collections.
    • List<T> encontra-se no espaço de nomes System.Collections.Generic.
  • Uso:

    • ArrayList é considerado obsoleto e não é recomendado seu uso em código novo.
    • List<T> é a opção preferida para a maioria dos cenários.

Exemplo de uso:

// Uso de ArrayList
System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
arrayList.Add(1);       // int é embalado em object
arrayList.Add("string"); // string é armazenada como object

int numero = (int)arrayList[0]; // É necessária conversão de tipos

// Uso de List<T>
System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>();
list.Add(1); // Adiciona um int

// int numero = list[0]; // Nenhuma conversão de tipos necessária

Tabela de comparação:

Característica ArrayList List<T>
Tipagem Não tipada (object) Genérica (T)
Desempenho Pode envolver boxing/unboxing Mais alto, sem boxing/unboxing para tipos valor
Segurança de tipos Baixa Alta (em tempo de compilação)
Espaço de nomes System.Collections System.Collections.Generic
Recomendado Não recomendado Recomendado