Sobes.tech
Junior

¿Cuál es la diferencia entre ArrayList y List en C#?

sobes.tech AI

Respuesta de la IA

Las diferencias entre ArrayList y List en C# son las siguientes:

  • Tipificación:

    • ArrayList almacena elementos de tipo object (colección no tipada), lo que requiere conversión de tipos al extraer elementos y reduce la seguridad de tipos.
    • List<T> es una colección genérica (T — un tipo definido), que almacena elementos de un tipo específico, garantizando la seguridad de tipos y eliminando la necesidad de conversión.
  • Rendimiento:

    • Agregar y extraer elementos en ArrayList puede ser más lento debido a la necesidad de boxing y unboxing de tipos valor.
    • List<T> generalmente es más rápido, especialmente para tipos valor, ya que no hay boxing/unboxing.
  • Seguridad de tipos:

    • ArrayList puede contener elementos de diferentes tipos, lo que puede causar errores en tiempo de ejecución.
    • List<T> proporciona seguridad de tipos en tiempo de compilación.
  • Implementación:

    • ArrayList se encuentra en el espacio de nombres System.Collections.
    • List<T> se encuentra en el espacio de nombres System.Collections.Generic.
  • Uso:

    • ArrayList se considera obsoleto y no se recomienda su uso en código nuevo.
    • List<T> es la opción preferida para la mayoría de los escenarios.

Ejemplo de uso:

// Uso de ArrayList
System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
arrayList.Add(1);       // int se empaqueta en object
arrayList.Add("cadena"); // string se guarda como object

int numero = (int)arrayList[0]; // Se requiere conversión de tipos

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

// int numero = list[0]; // No se requiere conversión de tipos

Tabla comparativa:

Característica ArrayList List<T>
Tipificación No tipada (object) Genérica (T)
Rendimiento Posible boxing/unboxing Más alto, sin boxing/unboxing para tipos valor
Seguridad de tipos Baja Alta (en tiempo de compilación)
Espacio de nombres System.Collections System.Collections.Generic
Recomendación No recomendado Recomendado