en este momento estoy usando List<short>
como un buffer para mantener las cosas por un tiempo mientras se hace un cálculo para cada valor basado en otros valores más abajo del buffer. Luego me di cuenta de que esto probablemente no era muy eficiente ya que me dijeron que List<>
es una lista enlazada, así que cada vez que hago whatever = myList[100];
lo peor es tener que saltar todos los otros nodos primero para obtener el valor que quiero. No quiero usar una matriz regular porque tengo un montón de Add()
y Remove()
dando vueltas en otros lugares del código. Entonces necesito una clase que herede IList<T>
pero use una estructura de datos de matriz normal. ¿Alguien sabe una clase en .net que funciona de esta manera, así que no tengo que escribir la mía? ¡Intenté usar ArrayList pero no es genérico!List Data Structure C# Efficiency
Respuesta
No, a List<T>
es una colección genérica, no una lista vinculada. Si necesita agregar y eliminar funcionalidades, entonces List<T>
es la implementación a la que la mayoría de las personas recurre por defecto.
ok, gracias mi idea de que una Lista <> es una lista vinculada incorrecta :( –
si ese es el caso ¿hay alguna razón para el uso de una matriz regular sobre la lista? –
Por simplicidad cuando solo se trata de un problema número y colección de objetos – thecoop
List<T>
no utiliza una implementación de lista vinculada. Internamente usa una matriz, por lo que parece ser exactamente lo que necesita. Tenga en cuenta que, debido a que es una matriz, Eliminar/insertar podría ser una operación costosa según el tamaño de la lista y el elemento de posición que se elimina/inserta: O (n). Sin saber más acerca de cómo lo está usando, es difícil recomendar una mejor estructura de datos.
Citando de la sección Observaciones del docs.
La clase List (T) es el equivalente genérico de la clase ArrayList. Implementa la interfaz genérica IList (T) usando una matriz cuyo tamaño se incrementa dinámicamente según sea necesario.
List<T>
está respaldado por una matriz, no una lista vinculada. Los accesos indexados de un List<T>
ocurren en tiempo constante.
Además de la respuesta correcta de tvanfosson, si alguna vez no está seguro de cómo funciona algo internamente, solo cargue el .NET Reflector y podrá ver exactamente cómo se implementan las cosas. En este caso, la perforación hasta el indexador de List<T>
nos muestra el siguiente código:
public T this[int index]
{
get
{
if (index >= this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException();
}
return this._items[index];
}
// ...
donde se puede ver que this._items[index]
es una matriz del tipo genérico T
.
Como Reflector ya no es gratuito, [ILSpy] (http://ilspy.net/) y [DotPeek] (http://www.jetbrains.com/decompiler/) son otras alternativas gratuitas. –
- 1. C# Data Structure Like Dictionary pero sin un valor
- 2. foldRight Efficiency?
- 3. Java efficiency
- 4. Aumento de Regex Efficiency
- 5. NHibernate efficiency
- 6. Python if statement efficiency
- 7. redis structure, performance
- 8. Time efficiency Parcial Inverted Index building
- 9. complex graphviz tree structure
- 10. Haskell style/efficiency
- 11. F # currying efficiency?
- 12. jQuery bind efficiency
- 13. jQuery Selectors, efficiency
- 14. Java Enum valueOf efficiency
- 15. XSLT Transform Efficiency
- 16. CSS Efficiency Questions
- 17. C++ list/vector help
- 18. ASP.Net MVC View Structure
- 19. MVC 3 project structure
- 20. if-else structure
- 21. Wordnet edit tree structure
- 22. SWIG Python Structure Array
- 23. Folder/File Structure Conventions?
- 24. Java Swing Program Structure
- 25. Pyramid project structure
- 26. Printing Table's structure/schema
- 27. BeginThread Structure - Delphi
- 28. SQL CASE vs JOIN efficiency
- 29. C++ vector/linked list hybrid
- 30. Android Package Structure Best Practice
Honestamente, no creo que tenga que insistir demasiado sobre la eficiencia. Cualquier ganancia que obtenga será apenas perceptible – lomaxx
'List <>' no es una lista enlazada. 'LinkedList <>' sin embargo es. Podrías haberlo notado porque no tiene sentido exponer el acceso aleatorio en una lista vinculada. – Dykam
El acceso indexado a una lista es O (1) operación. – digEmAll