Array versus List<T>: ¿Cuándo usar cuál?

Resuelto G S asked hace 15 años • 16 respuestas
MyClass[] array;
List<MyClass> list;

¿Cuáles son los escenarios en los que uno es preferible al otro? ¿Y por qué?

G S avatar Jan 12 '09 15:01 G S
Aceptado

En realidad, es raro que desee utilizar una matriz. Definitivamente use a en List<T>cualquier momento que desee agregar o eliminar datos, ya que cambiar el tamaño de las matrices es costoso. Si sabe que los datos tienen una longitud fija y desea microoptimizarlos por algún motivo muy específico (después de la evaluación comparativa), entonces una matriz puede resultar útil.

List<T>ofrece mucha más funcionalidad que una matriz (aunque LINQ la iguala un poco) y casi siempre es la opción correcta. Exceptuando paramslas discusiones, claro. ;-pag

Como contador - List<T>es unidimensional; donde tiene matrices rectangulares (etc.) como int[,]o string[,,], pero hay otras formas de modelar dichos datos (si es necesario) en un modelo de objetos.

Ver también:

  • ¿Cómo/Cuándo abandonar el uso de Arrays en c#.net?
  • Matrices, ¿cuál es el punto?

Dicho esto, uso mucho los arreglos en mi proyecto protobuf-net ; enteramente para el rendimiento:

  • realiza muchos cambios de bits, por lo que a byte[]es bastante esencial para la codificación;
  • Utilizo un byte[]búfer móvil local que lleno antes de enviarlo al flujo subyacente (y vv); más rápido que BufferedStreametc;
  • utiliza internamente un modelo de objetos basado en matrices ( Foo[]en lugar de List<Foo>), ya que el tamaño es fijo una vez construido y debe ser muy rápido.

Pero ésta es definitivamente una excepción; para el procesamiento general de líneas de negocio, List<T>siempre gana.

Marc Gravell avatar Jan 12 '2009 08:01 Marc Gravell

Realmente solo respondo para agregar un enlace que me sorprende que aún no se haya mencionado: la entrada del blog de Eric Lippert sobre "Arreglos considerados algo dañinos".

Se puede juzgar por el título que sugiere usar colecciones siempre que sea práctico, pero como señala acertadamente Marc, hay muchos lugares donde una matriz es realmente la única solución práctica.

Jon Skeet avatar Jan 12 '2009 08:01 Jon Skeet

A pesar de las otras respuestas que recomiendan List<T>, querrás usar matrices cuando manejes:

  • datos de mapa de bits de imagen
  • otras estructuras de datos de bajo nivel (es decir, protocolos de red)
Alnitak avatar Jan 12 '2009 08:01 Alnitak