List<T>
utiliza un array de soporte para sostener artículos:
- acceso Indizador (es decir FETCH/actualización) es O (1)
- Quitar de la cola es O (1)
- Eliminar de requiere otra parte elementos existentes que se desplazarán hacia arriba, por lo que O (n) efectivamente
- Añadir al final es O (1) a menos que requiera cambio de tamaño, en cuyo caso es O (n). (Esto duplica el tamaño del búfer, por lo que el costo amortizado es O (1).)
- Añadir a otro lugar requiere que los elementos existentes se desplacen hacia abajo, por lo que O (n) efectivamente
- Encontrar un artículo es O (n) a menos que esté ordenado, en cuyo caso una búsqueda binaria da O (log n)
En general, está bien usar listas bastante extensas. Si conoce el tamaño final cuando comience a completar una lista, es una buena idea usar el constructor que le permite especificar la capacidad, para evitar el cambio de tamaño. Más allá de eso: si le preocupa, explique el generador de perfiles ...
Realmente depende de lo que quieras hacer con ellos. – LukeH
"Rápido" y "lento" son irrelevantes. Relevantes son "suficientemente rápido para mi cliente" y "demasiado lento para mi cliente". Su primera pregunta debería ser "¿las listas son lo suficientemente rápidas?" Usted es el único que sabe quién es su cliente y cuáles son sus requisitos de rendimiento, por lo que solo * usted * puede responder esa pregunta. Lo responderá probando algunos puntos de referencia significativos y comparándolos con los objetivos centrados en el cliente del mundo real cuidadosamente establecidos. –