Visión general de List, Set y Map
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 63 de 110.
Dart proporciona tres tipos de colecciones principales que usarás constantemente al crear aplicaciones. Cada una tiene un propósito diferente para organizar y acceder a los datos.
Una Lista es una colección ordenada donde se accede a los elementos por índice. Los elementos mantienen su orden de inserción y se permiten duplicados:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Un Set es una colección desordenada de elementos únicos. Si intentas añadir un duplicado, simplemente se ignora:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Un Map almacena pares clave-valor, permitiéndote buscar valores por su clave asociada:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30Aquí tienes una comparación rápida:
| Colección | Ordenada | Duplicados | Acceso por |
|---|---|---|---|
| List | Sí | Permitidos | Índice |
| Set | No | No permitidos | Comprobación de existencia |
| Map | No* | Claves únicas | Clave |
Estas colecciones se vuelven aún más potentes cuando se combinan con genéricos, que explorarás en las próximas lecciones para crear colecciones de tipo seguro que funcionen con tus clases personalizadas.
Desafío
FácilVamos a construir un sistema de gestión de aula que utiliza los tres tipos de colecciones para organizar los datos de los estudiantes de diferentes maneras. Verás cómo las Listas, los Conjuntos y los Mapas cumplen propósitos distintos al gestionar la misma información.
Organizarás tu código en dos archivos:
classroom.dart: Crea una claseClassroomque gestione los datos de los estudiantes utilizando los tres tipos de colecciones:- Una
List<String>llamadaattendanceOrderpara rastrear a los estudiantes en el orden en que llegaron (se permiten duplicados si un estudiante se registra varias veces) - Un
Set<String>llamadouniqueStudentspara rastrear qué estudiantes están presentes (sin duplicados) - Un
Map<String, int>llamadoscorespara almacenar la calificación del examen de cada estudiante
recordArrival(String name)- añade el nombre tanto a la lista de asistencia como al conjunto de estudiantes únicossetScore(String name, int score)- almacena la calificación del estudiante en el mapaprintReport()- imprime el informe del aula (formato mostrado a continuación)
- Una
main.dart: Importa tu archivo de aula y demuestra el sistema:- Crea una instancia de
Classroom - Registra las llegadas en este orden:
'Alice','Bob','Alice','Carol','Bob' - Establece las calificaciones: Alice =
95, Bob =87, Carol =92 - Llama a
printReport()
- Crea una instancia de
El método printReport() debe mostrar:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Observa cómo la Lista preserva cada llegada (incluyendo duplicados), el Conjunto mantiene automáticamente solo nombres únicos y el Mapa asocia a cada estudiante con su calificación. ¡Cada tipo de colección cumple su propósito perfectamente!
Salida esperada:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Hoja de referencia
Dart proporciona tres tipos de colecciones principales para organizar datos:
List - Una colección ordenada donde se accede a los elementos por índice. Se permiten duplicados:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set - Una colección no ordenada de elementos únicos. Los duplicados se ignoran automáticamente:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Map - Almacena pares clave-valor para la búsqueda por clave:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30| Colección | Ordenada | Duplicados | Acceso por |
|---|---|---|---|
| List | Sí | Permitidos | Índice |
| Set | No | No permitidos | Comprobación de existencia |
| Map | No* | Claves únicas | Clave |
Pruébalo tú mismo
import 'classroom.dart';
void main() {
// TODO: Crear una instancia de Classroom
// TODO: Registrar las llegadas en este orden: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
// TODO: Establecer las puntuaciones: Alice = 95, Bob = 87, Carol = 92
// TODO: Llamar a printReport() para mostrar los datos del aula
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de POO
Archivos externosLibrerías e importacionesIntroducción a la POOClases vs. ObjetosLa palabra clave thisMétodosVariables de instanciaConceptos básicos de constructoresResumen - Calculadora sencilla4Seguridad de nulos
Introducción a la seguridad de nulosNulables vs No nulablesLos operadores ? y !Palabra clave Late y Null SafetyOperadores Null-awareNull Safety en clasesResumen - Sistema de perfil de usuario7Clases abstractas e interfaces
Clases abstractasMétodos abstractosInterfaces en DartInterfaces implícitasImplementar vs. ExtenderInterfaces múltiplesRepaso - Calculadora de figuras10Colecciones y Genéricos
Visión general de List, Set y MapColecciones con seguridad de tiposClases genéricasMétodos genéricosRestricciones genéricasIterable e IteratorResumen - Almacenamiento genérico2Constructores en Dart
Constructor por defectoConstructores nombradosListas de inicializaciónConstructores constantesConstructores de fábricaConstructores de redireccionamientoResumen - Constructor de formas5Encapsulamiento
Miembros públicos vs. privadosLa convención del prefijo _Privacidad a nivel de libreríaProfundidad en Getters y SettersOcultamiento de informaciónResumen - Registros de estudiantes8Mixins
Introducción a los MixinsCreación de MixinsUso de múltiples MixinsPalabra clave on en MixinsMixin vs HerenciaMixin vs InterfazResumen - Sistema Animal11Métodos especiales
Sobrescritura de toString()Sobrescritura de hashCode y ==Interfaz ComparableMétodo call()Sobrescritura de noSuchMethodResumen - Colección personalizada14Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy3Propiedades de clase
Miembros de instancia vs. estáticosCampos Final y ConstVariables LateMétodos y campos estáticosGetters y SettersResumen - Gestor de cuentas bancarias6Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosLa anotación @overrideLa palabra clave final en clasesConstructores y herenciaResumen - Jerarquía de empleados9Polimorfismo
Fundamentos del polimorfismoPolimorfismo mediante interfacesComprobación de tipos en tiempo de ejecuciónLos operadores is y asPalabra clave covariantResumen - Procesador de pagos12POO Asíncrona
Futures y async/awaitFundamentos de StreamsStream ControllersConstructores asíncronosAsincronía en métodos de claseRepaso - Data Fetcher15Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository