List<T> y Colecciones Genéricas
List<T> es la colección más usada en C# y es básicamente un array que crece automáticamente. Internamente mantiene un array y cuando se queda sin espacio, crea uno del doble de tamaño y copia los elementos. Este "doubling" hace que las operaciones Add() al final sean O(1) amortizado (eficiente en promedio).
La diferencia con los arrays: usa Count en lugar de Length, tiene docenas de métodos útiles (Add, Remove, Find, Sort), y puede crecer y encogerse sin que te preocupes.
Stack<T> implementa la estructura LIFO (Last In, First Out): como una pila de platos, el último que pones es el primero que sacas. Los métodos son Push (poner), Pop (sacar el último) y Peek (ver el último sin sacarlo). Queue<T> implementa FIFO (First In, First Out): como una fila de banco, el primero en entrar es el primero en salir.
Los métodos son Enqueue (ponerse en la fila), Dequeue (siguiente en la fila) y Peek. Estas estructuras resuelven categorías específicas de problemas como deshacer/rehacer o procesamiento de mensajes.
using System.Collections.Generic;
// Crear listas
var nombres = new List<string>();
var numeros = new List<int> { 1, 2, 3, 4, 5 };
// Agregar elementos
nombres.Add("Ana");
nombres.Add("Bob");
nombres.AddRange(new[] { "Carlos", "Diana" });
nombres.Insert(1, "Alicia"); // Inserta en posición 1
// Acceso
Console.WriteLine(nombres[0]); // Ana
Console.WriteLine(nombres.Count); // 5
// Buscar
bool existe = nombres.Contains("Ana"); // true
int indice = nombres.IndexOf("Bob"); // 2
string? encontrado = nombres.Find(n => n.StartsWith("C")); // Carlos
List<string> filtrados = nombres.FindAll(n => n.Length > 3);
// Eliminar
nombres.Remove("Bob"); // Por valor
nombres.RemoveAt(0); // Por índice
nombres.RemoveAll(n => n == "Ana"); // Por condición
// Ordenar
nombres.Sort();
nombres.Sort((a, b) => b.CompareTo(a)); // Descendente
// Conversiones
string[] array = nombres.ToArray();
var readOnly = nombres.AsReadOnly();
// Stack<T> - LIFO
var pila = new Stack<int>();
pila.Push(1); pila.Push(2); pila.Push(3);
int top = pila.Pop(); // 3
int peek = pila.Peek(); // 2 (sin quitar)
// Queue<T> - FIFO
var cola = new Queue<string>();
cola.Enqueue("primero");
cola.Enqueue("segundo");
string siguiente = cola.Dequeue(); // "primero"
Practica esta lección
Resuelve los ejercicios del curso de C# en la app, gratis y con corrección automática.
Empezar a practicar