Johan Manuel Perez Soto
Si lo ves desde cierto punto de vista, todo es un arreglo...
Comenzamos la etapa tres del proyecto con un enfoque práctico: implementar funcionalidades con colecciones para manejar cursos de forma flexible. Aquí verás por qué, en la mayoría de casos, las colecciones superan a los arreglos, cuándo elegir cada una y qué tipos de colecciones ofrece C# para escribir código más claro, seguro y eficiente.
¿Qué diferencia a arreglos y colecciones en rendimiento?
Los arreglos son lineales en memoria y extremadamente eficientes al recorrer grandes cantidades de datos. Consumen menos memoria porque colocan un objeto junto a otro, sin tanta metadata adicional. Con tipos nativos como entero, flotante y booleano, el rendimiento es máximo.
En contraste, las colecciones priorizan la flexibilidad: permiten agregar y remover elementos, ajustar tamaño y especializar comportamientos sin reescribir estructuras desde cero.
¿Cuándo conviene usar arreglos o colecciones?
La guía práctica es clara: en la mayoría de casos, usa colecciones. El esfuerzo adicional para exprimir rendimiento con arreglos no suele compensar frente a la facilidad de desarrollo y mantenimiento que brindan las colecciones.
Recuerda una limitación clave: un arreglo no puede crecer ni reducirse. No se pueden remover miembros, solo cambiar el valor en cada posición. En colecciones sí puedes agregar y quitar elementos libremente.
¿Qué tipos de colecciones existen en C# y cómo elegir?
En C# podemos agrupar colecciones como simples, especializadas, genéricas y concurrentes. La elección impacta directamente el rendimiento y la ergonomía al programar.
¿Qué son las colecciones simples y el boxing/unboxing?
Las simples almacenan todo como objeto. Para guardar un valor o instancia, ocurre boxing: se mete en una “caja” de tipo objeto. Al recuperarlo, necesitas unboxing para volver al tipo original. Esto tiene costo de memoria y procesamiento, un claro performance penalty.
¿Por qué las colecciones genéricas dominan el 90 %?
Las genéricas evitan boxing/unboxing. Se definen sin cuerpo de tipo y, al crear la colección, indicas qué clase u objeto manejará. Así, trabajan con el tipo real desde compilación.
Sobre las especializadas: existen para tipos concretos, por ejemplo, StringCollection, BitVector, ListDictionary, NameValueCollection. Agregan operaciones útiles en contextos puntuales, aunque no son las más usadas.
¿Qué resuelven las colecciones concurrentes?
C# está pensado para el multiparalelismo y múltiples cores. Si varios cores acceden a la misma colección, pueden surgir inconsistencias: un hilo referencia un objeto que otro eliminó. Las colecciones concurrentes integran control de acceso para evitar estos errores.
¿Con qué colecciones trabajas hoy y por qué las elegiste? Comparte tus dudas y experiencias en los comentarios para enriquecer la discusión.
Johan Manuel Perez Soto
Si lo ves desde cierto punto de vista, todo es un arreglo...
ELKIN YESID MORENO VELEZ
Conceptos fundamentales muy claros, bien explicados. Excelente dominio y conocimiento de Juan Carlos Ruiz. Felicitaciones.
Juan David Amaya Cardenas
¿Que es una Colección? Una colección es una clase, por lo que debe declarar una instancia de la clase para poder agregar elementos a dicha colección; estas son usadas para crear y administrar grupos de objetos relacionados, las colecciones proporcionan una manera más flexible de trabajar con grupos de objetos.
Alonso Fabricio Samanez Nuñez
:thumbsup:
Alex Pacheco
Company_adminAlejandro Betancur
Colecciones : Son clases en las que se pueden agrupar objetos del mismo tipo.
Son de fácil manipulación; es decir que se puede eliminar , agregar elementos sin preocupación de un tamaño fijo.
Se tienen colecciones que se encargan de realizar tareas especificas, ejemplo :
El tamaño de la colección puede variar en el tiempo (Puede incrementar o disminuir).
Cuando Utilizar Arreglos:
Solo se justifica el uso de arreglos cuando de verdad se necesita utilizar el procesador.
Cuando la implementación del código es muy simple.
Tipos de colecciones :
Simples : Se pueden manipular todo tipo de objetos.(A dia de hoy casi nadie las utiliza porque tiene un costo de rendimiento muy alto).
Especializadas : Son colecciones que están diseñadas para manipular tipos de datos específicos.(Tampoco son tan utilizadas al día de hoy.)
aSXasx SAXasx
Hola, espero estén bien. Por acá dejo algunos apuntes de terminología:
1. Metadatos: Datos que describen datos.
2. Corrimiento de bytes: desplazamiento de posición de un byte o cambio de lugar.
3. DLL: Dynamic Link Library, Biblioteca de vínculos dinámicos. - Contiene código y datos. - Eficaz uso de la memoria. - Puede usarse por más de un programa en simultáneo.
4. Performance: es el rendimiento en el que puede llegar a afectar el software a los recursos máquina, por ejemplo memoria, almacenamiento.
5. Boxing unboxing: proceso de conversión a entre tipos de valor y tipos de referencia.
Espero les ayude un poco. Gracias por leer!
Wilson Alejandro Gonzalez Gaitan
Habia posibilidad de implementar algun ejemplo de estas listas
Simple: manipulan todo como tipos Object; algunos ejemplos son el ArrayList, BitArray, Queue, Stack y Sorted.
Especializadas: son diseñadas para manejar un tipo de dato especifico; algunos ejemplos son, StringCollection, BitVector, ListDictionary y NameValueCollection.
Genéricas: son las más usadas hoy en día, algunos ejemplos son: Dictionary<T,K>, List<T>, Queue<T>, Stack<T>, HashSet<T> y SortedSet<T>.
Concurrentes: son diseñadas para el acceso concurrente; algunos ejemplos son: ConcurrentBad<T>, ConcurrentStack<T> y ConcurrentQueue<T>.
Aderson Rangel Parada
Excelente propuesta.
Jesús Enrique Prieto Treviño
¡¡¡En tu cara Java!!!
Andrés Felipe Largo Rodríguez
Se asemeja un poco al array list de Java
john fredy quimbaya orozco
pienso que eso depende de la necesidad sea java, C#, ptyhon,php
Usuario anónimo
UserHay muchos tipos de colecciones:
Simple: manipulan todo como tipos Object; algunos ejemplos son el ArrayList, BitArray, Queue, Stack y Sorted. Especializadas: son diseñadas para manejar un tipo de dato especifico; algunos ejemplos son, StringCollection, BitVector, ListDictionary y NameValueCollection. Genéricas: son las más usadas hoy en día, algunos ejemplos son: Dictionary<T,K>, List<T>, Queue<T>, Stack<T>, HashSet<T> y SortedSet<T>. Concurrentes: son diseñadas para el acceso concurrente; algunos ejemplos son: ConcurrentBad<T>, ConcurrentStack<T> y ConcurrentQueue<T>.
Wilson Alexander Caal Pacay
Demasiada información :C jaja ya se me olvido todo
Carlos Javier Bazan Huaman
la explicacion es buena.
Janer Tegue
List ---> por fin
Tecnoap México
De la tabla de ventajas arreglos/colecciones:
Arreglos
Colecciones
Más fáciles de manipular
Múltiples variantes y especializaciones para cada tarea
Tamaños flexibles
Extensibles, personalizados
Gerardo Alexis Eche Navas
Justo lo que veo mucho en mi trabajo, el List
Usuario anónimo
User"Los arreglos son mucho más rápidos para trabajar en memoria, consumen menos memoria, si se utilizan tipos nativos son mucho más eficientes y son ideales para trabajar con APIS de bajo nivel. Por otro lado, las colecciones son más fáciles de manipular, tienen múltiples variantes y, especializaciones para cada tarea, los tamaños son flexibles y las colecciones son extensibles y personalizables.
Jimmy Buriticá Londoño
Excelente aporte, bien resumido el objetivo de la clase.
Gabriel Alejandro Delgado Álvarez
Para los que en las clases anteriores cuando el profesor dijo que el Foreach tenía un costo en memoria no supieron que de hablaba. Se referia a las Colecciones simples, pues al hacer foreach de ciertos tipos de datos como un Enum, le haces un box a esos datos y te hace usar más memoria en esa tarea.
Jeisson Santiago Cortes Ortiz
también se les pueden llamar contenedoras de cantidad fija y contenedoras de cantidad variable.
Kevin Villatoro
Excelente!
Eder Quintana Nequiz
Tipos de Colecciones: Simples, especializadas, genericas