Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Colecciones y estructuras de datos

A menudo, los datos similares pueden controlarse de forma más eficaz si se almacenan y manipulan como si fuesen una colección. Puede utilizar la clase System.Array o las clases de los espacios de nombres System.Collections, System.Collections.Generic, System.Collections.Concurrent y System.Collections.Immutable para agregar, quitar y modificar elementos individuales o un intervalo de elementos de una colección.

Hay dos tipos principales de colecciones: las colecciones genéricas y las colecciones no genéricas. Las colecciones genéricas se agregaron en la versión 2.0 de.NET Framework y son colecciones con seguridad de tipos en tiempo de compilación. Debido a esto, las colecciones genéricas normalmente ofrecen un mejor rendimiento. Las colecciones genéricas aceptan un parámetro de tipo cuando se construyen y no requieren conversiones con el tipo Object al agregar o quitar elementos de la colección. Además, la mayoría de colecciones genéricas son compatibles con aplicaciones de la Tienda Windows. Las colecciones no genéricas almacenan elementos como Object, requieren conversión y la mayoría no son compatibles con el desarrollo de aplicaciones de la Tienda Windows. Sin embargo, puede que vea colecciones no genéricas en código antiguo.

A partir de .NET Framework 4, las colecciones del espacio de nombres System.Collections.Concurrent proporcionan operaciones eficaces y seguras para subprocesos con el fin de obtener acceso a los elementos de la colección desde varios subprocesos. Las clases de colección inmutables en el espacio de nombres System.Collections.Immutable (paquete de NuGet) son intrínsecamente seguras para los subprocesos, ya que las operaciones se realizan en una copia de la colección original, mientras que la colección original no se puede modificar.

Este tema contiene las secciones siguientes.

Todas las colecciones ofrecen métodos para agregar, quitar o buscar elementos en la colección. Además, todas las colecciones que implementan directa o indirectamente las interfaces ICollection o ICollection<T> comparten estas características:

  • Capacidad para enumerar la colección

    Las colecciones de .NET Framework implementan System.Collections.IEnumerable o System.Collections.Generic.IEnumerable<T> para permitir procesar una iteración en la colección. Un enumerador puede considerarse como un puntero móvil para cualquier elemento de la colección. La instrucción foreach, in (Referencia de C#) y Instrucción For Each...Next (Visual Basic) usan el enumerador expuesto por el método GetEnumerator y ocultan la complejidad que supone manipular el enumerador. Además, cualquier colección que implementa System.Collections.Generic.IEnumerable<T> se considera un tipo consultable y se puede consultar con LINQ. Las consultas LINQ proporcionan un modelo común para acceder a los datos. Por lo general, son más concisas y legibles que los bucles foreach estándar y ofrecen capacidad de filtrado, ordenación y agrupación. Las consultas LINQ también pueden mejorar el rendimiento. Para obtener más información, vea LINQ to Objects, Parallel LINQ (PLINQ) y Introducción a las consultas LINQ (C#).

  • Capacidad de copiar el contenido de la colección en una matriz

    Todas las colecciones se pueden copiar en una matriz mediante el método CopyTo; sin embargo, el orden de los elementos de la nueva matriz se basa en la secuencia en la que los devuelve el enumerador. La matriz resultante siempre es unidimensional con un límite inferior de cero.

Además, muchas clases de colecciones contienen las siguientes características:

  • Propiedades de capacidad y recuento

    La capacidad de una colección es el número de elementos que puede contener. El recuento de una colección es el número de elementos que realmente contiene. Algunas colecciones ocultan la capacidad, el recuento, o ambos.

    La mayoría de las colecciones expanden automáticamente su capacidad cuando se alcanza la capacidad actual. La memoria se reasigna y los elementos de la antigua colección se copian en la nueva. Esto reduce el código necesario para utilizar la colección; sin embargo, el rendimiento de la colección podría verse afectado negativamente. Por ejemplo, en List<T>, si Count es menor que Capacity, el agregar un elemento supone una operación O(1). Si es necesario aumentar la capacidad para alojar el nuevo elemento, agregar un elemento se convierte en una operación O(n), donde n es Count. La mejor manera de evitar el rendimiento deficiente provocado por múltiples reasignaciones es establecer la capacidad inicial el tamaño estimado de la colección.

    BitArray es un caso especial; su capacidad es igual que su longitud, que es la misma que su recuento.

  • Límite inferior coherente

    El límite inferior de una colección es el índice de su primer elemento. Todas las colecciones indizadas en el espacio de nombres System.Collections tienen un límite inferior de cero, lo que significa que están indizadas en 0. De forma predeterminada, Array tiene un límite inferior de cero, pero se puede definir un límite inferior diferente al crear una instancia de la clase Array con Array.CreateInstance.

  • Sincronización para el acceso de varios subprocesos (solo clases System.Collections).

    Los tipos de colecciones no genéricas del espacio de nombres System.Collections proporcionan una seguridad de subprocesos con sincronización; normalmente se exponen a través de los miembros SyncRoot y IsSynchronized. Estas colecciones no son seguras para subprocesos de forma predeterminada. Si necesita un acceso multiproceso escalable y eficaz a una colección, utilice una de las clases del espacio de nombres System.Collections.Concurrent o considere el uso de una colección inmutable. Para obtener más información, vea Colecciones seguras para subprocesos.

En general, debería utilizar colecciones genéricas. En la tabla siguiente se describen algunos escenarios habituales de las colecciones y las clases de colección que puede utilizar en esos escenarios. Si es la primera vez que usa colecciones genéricas, con esta tabla le será más fácil elegir la colección genérica que funciona mejor para su tarea.

Deseo...

Opciones de colección genérica

Opciones de colección no genérica

Opciones de colección de subprocesos o inmutable

Almacenar elementos como pares clave/valor para una consulta rápida por clave

System.Collections.Generic.Dictionary<TKey, TValue>

Hashtable

(Colección de pares clave/valor que se organizan en función del código hash de la clave).

System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>

System.Collections.ObjectModel.ReadOnlyDictionary<TKey, TValue>

ImmutableDictionary

Acceso a elementos por índice

System.Collections.Generic.List<T>

System.Array

System.Collections.ArrayList

ImmutableList

ImmutableArray

Utilizar elementos FIFO (el primero en entrar es el primero en salir)

System.Collections.Generic.Queue<T>

System.Collections.Queue

System.Collections.Concurrent.ConcurrentQueue<T>

ImmutableQueue

Utilizar datos LIFO (el último en entrar es el primero en salir)

System.Collections.Generic.Stack<T>

System.Collections.Stack

System.Collections.Concurrent.ConcurrentStack<T>

ImmutableStack

Acceso a elementos de forma secuencial

System.Collections.Generic.LinkedList<T>

Sin recomendación

Sin recomendación

Recibir notificaciones cuando se quitan o se agregan elementos a la colección. (implementa INotifyPropertyChanged y System.Collections.Specialized.INotifyCollectionChanged)

System.Collections.ObjectModel.ObservableCollection<T>

Sin recomendación

Sin recomendación

Una colección ordenada

System.Collections.Generic.SortedList<TKey, TValue>

System.Collections.SortedList

ImmutableSortedDictionary

ImmutableSortedSet

Un conjunto de funciones matemáticas

System.Collections.Generic.HashSet<T>

System.Collections.Generic.SortedSet<T>

Sin recomendación

ImmutableHashSet

ImmutableSortedSet

Título

Descripción

Seleccionar una clase de colección

Describe las diferentes colecciones y le ayuda a seleccionar una para su escenario.

Tipos de colección utilizados normalmente

Describe los tipos de colección genéricos y no genéricos más utilizados, como System.Array, System.Collections.Generic.List<T> y System.Collections.Generic.Dictionary<TKey, TValue>.

Cuándo utilizar colecciones genéricas

Describe el uso de los tipos de colección genéricos.

Comparaciones y ordenaciones en colecciones

Describe el uso de las comparaciones de igualdad y ordenación en las colecciones.

Tipos de colecciones ordenadas

Describe las características y el funcionamiento de colecciones ordenadas.

Tipos de las colecciones Hashtable y Dictionary

Describe las características de los tipos de diccionarios basados en hash genéricos y no genéricos.

Colecciones seguras para subprocesos

Describe los tipos de colección, como System.Collections.Concurrent.BlockingCollection<T> y System.Collections.Concurrent.ConcurrentBag<T>, que admiten un acceso simultáneo seguro y eficaz desde varios subprocesos.

Immutable Collections

Presenta las colecciones inalterables y proporciona vínculos a los tipos de colección.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft