2012-05-25 47 views
14

Duplicar posible:
When to use ArrayList over array[] in c#?¿Diferencias significativas en Array vs Array List?

Desde el punto de vista de los costes de memoria o procesador, qué parece que hay una diferencia significativa entre una matriz y un objeto arrayList?

+0

@NikhilAgrawal no es un duplicado de ese tema ya que la pregunta es específicamente sobre las diferencias de rendimiento, no el contexto de uso. – Asik

+0

Sospecho que ArrayList sería más lento ya que tiene que moldear cada elemento en la matriz al recuperar. – Matthew

Respuesta

41

Array (Un espacio de nombres del sistema) es un tipo de datos que se puede usar llamando a los índices. durante el tiempo de ejecución, uno realmente no puede cambiar el tamaño de la matriz, a menos que use el método de copiar la matriz y deshacerse de la anterior.

En .NET, Visual Studio hace uso de una clase especial para almacenar los datos. Debido a esto, el rendimiento es realmente bastante rápido. Esto también se debe a que en una matriz, necesita especificar el tamaño y, por lo tanto, los datos se almacenan uno después del otro.

Ejemplos:

int[] myNumbers= new int[5]; 
myNumbers[0] = 16; 

ArrayList (System.Collections de espacio de nombres) es una colección de tipo de datos. Para completar un ArrayList, uno puede usar el método .Add. ArrayLists es muy dinámico en el sentido de que cuando agrega y/o elimina elementos de él, el rendimiento permanece igual.

La estructura interna de una ArrayList es una matriz.

Ejemplos:

ArrayList myArray = new ArrayList(); 
myArray.Add(“Steph”); 
string str = myArray[0]; 

La mayor parte del tiempo, tienden a elegir las listas de matriz en lugar de matrices ya que no tenemos idea de lo grande que va a salir. Las matrices son ideales cuando sabes cuántos elementos va a poner en él. Siempre que sea posible, se recomienda utilizar matrices ya que esto mejora drásticamente el rendimiento.

La matriz es una secuencia de datos homogéneos, mientras que ArrayList es una secuencia de datos heterogéneos. Es por eso que tenemos que encasillar todos los datos en ArrayLists.

Las matrices son multidimensionales pero ArrayList siempre es unidimensional.

Las matrices están fuertemente tipadas y funcionan bien como parámetros. Si conoce la longitud de su colección y está reparada, debe usar una matriz.

ArrayLists no están fuertemente tipadas, cada Inserción o Retrial necesitarán un molde para volver a su tipo original. Si necesita un método para tomar una lista de un tipo específico, ArrayLists se queda corto porque podría pasar una lista de arreglos que contenga cualquier tipo. ArrayLists utiliza una matriz que se expande dinámicamente internamente, por lo que también hay un golpe para expandir el tamaño de la matriz interna cuando alcanza su capacidad.

+0

Hay otro objeto llamado lista simple. ¿Cómo se compara con una ArrayList? Lo que parece ser un control más sofisticado. –

+2

Una lista es una combinación de buenas propiedades de Array y Array List. Al igual que Array, contiene datos homogéneos. Al igual que ArrayList, puede seguir agregando tantos datos como desee. –

6

Una matriz es una estructura de datos de bajo nivel que esencialmente se asigna a una región en la memoria. Un ArrayList es una lista de longitud variable implementada como una matriz de object que se vuelve a asignar a medida que la lista crece.

ArrayList tiene, por tanto, algunos gastos generales relacionados con la gestión del tamaño de la matriz interna y más sobrecarga relacionada con la conversión de objetos al tipo correcto cuando se accede a la lista.

Además, almacenar todo como object significa que los tipos de valor se recuadran en escritura y no en caja en lectura, lo que es extremadamente perjudicial para el rendimiento. Usando List<T>, una lista de tamaño variable similar pero fuertemente tipada evita este problema.

De hecho, ArrayList está prácticamente obsoleto a favor de List<T> desde .NET 2.0.

+0

Hay otro objeto llamado Lista simple. ¿Cómo se compara con una ArrayList? Lo que parece ser un control más sofisticado. –

+0

@MikeOlson Ya expliqué que en mi respuesta ... ¿lo has leído? – Asik

+0

Lo siento, sí, lo leí pero no estaba seguro de si la lista era la misma que la lista simple. ¿Entonces básicamente esta simple lista ha reemplazado básicamente la lista de Array a favor de la facilidad de uso? –

1

Un conjunto es un bloque contiguo de memoria de tamaño fijo, mientras que un ArrayList (aunque debe preferir List desde .NET 2.0) envuelve un conjunto para proporcionar un almacenamiento de tamaño variable.

La "diferencia" entre ellos es que, en la medida en que están encapsulados, una ArrayList se puede cambiar de tamaño, una matriz no. En lo que se refiere a la implementación: debido a que ArrayList envuelve (y reasigna) arrays, requerirá más memoria que una matriz (ya que debe conocer la cantidad actual de elementos, a diferencia de su capacidad), además una ArrayList también requiere tiempo de CPU para reasignar y copiar su matriz interna si alguna vez alcanza su capacidad interna.

Sin embargo, la creación de instancias de una ArrayList no es más costosa que la asignación de una matriz. La única diferencia es que hay un puñado de instrucciones necesarias para inicializar el estado de ArrayList. La diferencia es insignificante y no vale la pena preocuparse.

Encontrará que si está reasignando una matriz usted mismo como medio para crear una colección de tamaño variable, entonces es mejor que utilice ArrayList/List, ya que ha sido probado exhaustivamente.

+1

Hay otro objeto llamado Lista simple. ¿Cómo se compara con una ArrayList? Lo que parece ser un control más sofisticado. –

+0

La principal diferencia entre ArrayList y la Lista genérica es que la lista genérica es segura, mientras que la lista de arrays no lo es. – DinoMyte