: Cuando se utiliza una lista enlazada (a través de punteros struct típicamente), hay que tener una consideración especial para asegurarse de que no se pierde memoria. Como se mencionó anteriormente, las listas enlazadas son fáciles de barajar, porque todo lo que estamos haciendo es cambiar los punteros, pero ¿nos vamos a acordar de liberar todo?
: Java tiene una recolección automática de basura, por lo que las fugas de memoria no serán un problema, pero los detalles de implementación de lo que es una lista enlazada están ocultos para el programador de alto nivel. Métodos como la eliminación de un nodo de la mitad de la lista es un procedimiento más complicado de lo que algunos usuarios del lenguaje esperarían.
¿Por qué una lista enlazada en lugar de un array? Bueno, como algunos ya han dicho, mayor velocidad de inserciones y eliminaciones.Pero tal vez no tengamos que vivir con los límites de ninguno de los dos, y obtener lo mejor de ambos, al mismo tiempo… ¿eh?
Para las eliminaciones de arrays, se puede utilizar un byte «Deleted», para representar el hecho de que una fila ha sido eliminada, por lo que ya no es necesario reordenar el array. Para aliviar la carga de las inserciones, o los datos que cambian rápidamente, utilice una lista enlazada para eso. Entonces, cuando se refiera a ellas, haga que su lógica busque primero en una, y luego en la otra. De este modo, su uso combinado le proporciona lo mejor de ambos.
Si tienes un array muy grande, puedes combinarlo con otro array o lista enlazada mucho más pequeño, en el que el más pequeño contenga los 20, 50 o 100 elementos más recientes. Si el elemento que se necesita no está en la lista enlazada más corta o en el array, se va al array grande. Si se encuentra allí, se puede añadir a la lista/array enlazado más pequeño bajo la premisa de que «los elementos utilizados más recientemente son los que más se van a reutilizar» (y sí, posiblemente eliminando el elemento menos utilizado de la lista). Lo cual es cierto en muchos casos y resolvió un problema que tuve que abordar en un módulo de comprobación de permisos de seguridad de .ASP, con facilidad, elegancia y una velocidad impresionante.
Mientras que muchos de ustedes han tocado las principales ventajas y desventajas de las listas enlazadas frente a los arrays, la mayoría de las comparaciones son sobre cómo uno es mejor o peor que el otro, por ejemplo, se puede hacer un acceso aleatorio en los arrays pero no es posible en las listas enlazadas y otros. Sin embargo, esto es asumiendo que las listas enlazadas y los arrays van a ser aplicados en una aplicación similar. Sin embargo, una respuesta correcta debería ser cómo se prefiere una lista enlazada a un array y viceversa en una aplicación concreta. Supongamos que se quiere implementar una aplicación de diccionario, ¿qué se usaría? Array: mmm, permitiría una fácil recuperación a través de la búsqueda binaria y otras cosas de búsqueda… pero pensemos cómo la lista de enlaces puede ser mejor… Digamos que se quiere buscar «Blob» en el diccionario. Tendría sentido tener una lista de enlaces de A->B->C->D—->Z y luego cada elemento de la lista también apuntando a una matriz u otra lista de todas las palabras que comienzan con esa letra ..
Ahora, ¿es mejor el enfoque anterior o un array plano de [Adam,Apple,Banana,Blob,Cat,Cave]? Una de las principales ventajas de las listas de enlaces es que un elemento no sólo apunta al siguiente elemento, sino también a otra lista de enlaces, matriz, montón o cualquier otra ubicación de memoria. La lista de enlaces, por otro lado, es un conjunto de unidades de memoria no contiguas (puede ser de cualquier tamaño y puede almacenar cualquier cosa) y que apuntan unas a otras de la manera que quieras. Del mismo modo, digamos que usted está haciendo una unidad USB. Ahora, ¿quieres que los archivos se guarden como cualquier matriz o como una lista de enlaces? Creo que entiendes lo que quiero decir 🙂
¿Por qué alguien querría usar una lista enlazada en lugar de un array?Sólo por una razón: si necesitas una estructura de datos de lista enlazada y el lenguaje de programación que utilizas no admite punteros.
Además de la comodidad en las inserciones y eliminaciones, la representación en memoria de las listas enlazadas es diferente a la de los arrays. No hay ninguna restricción en el número de elementos de una lista enlazada, mientras que en las matrices hay que especificar el número total de elementos.Compruebe
este artículo de
artículo.Las personas que utilizan listas enlazadas deben leer. Habla de la extracción fuera de orden, el prefetch por hardware, la latencia de la memoria, etc.http://www.futurechips.org/thoughts-for-researchers/quick-post-linked-lists.html
Esto supone que hay una respuesta única que indica que uno es siempre mejor que el otro, y eso simplemente no es así. El análisis de cada caso y la habilidad del desarrollador son componentes vitales en la selección de la herramienta adecuada para un trabajo determinado. –
David W
- Perdonen el retraso en la respuesta, pero soy el autor del artículo referenciado. Absolutamente de acuerdo con David. no hay respuestas en blanco y negro, pero mi punto en este artículo era mostrar las cosas malas de las listas enlazadas que no se suelen tener en cuenta. –
- Aater Suleman
En resumen, el libro de Jeremías sigue siendo un texto «acompañante» de primer orden para las Lamentaciones, incluso si los argumentos a favor de la autoría jeremiana resultan insuficientes. El ímpetu por encontrar múltiples autores fracasa por la misma razón: faltan pruebas persuasivas. La base para tomar una decisión sobre esta cuestión sigue siendo escasa, por lo que el juicio sobre quién se considera más probable que sea el autor o autores variará de un lector a otro.
Notas
- Por interés, así es como se ve en el Códice Sinaítico:
- Un ejemplo de cada uno debe ser suficiente: Rashi identifica las Lamentaciones con el rollo quemado por Joacim (Jeremías 36); Calvino comienza su comentario con una consideración sobre la autoría del libro y la defensa de Jeremías como su autor.
- De los eruditos del siglo XIX, tanto C.F. Keil (como parte de su Jeremías comentario, trad. cast. 1880, pp. 339-350) y S.R. Driver (en su Introducción9ª ed., 1913, pp. 461-465, primera edición de 1891) tienen exploraciones minuciosas de la cuestión tal y como se planteó en su día: Keil opta por la autoría jeremiana, Driver la refuta.
- De los cinco capítulos, los cuatro primeros son poemas «acrósticos alfabéticos», aunque siguiendo diferentes patrones para implementar el «acróstico» – y el capítulo 5 no es «acróstico» en absoluto, aunque sigue teniendo 22 líneas de longitud (coincidiendo con la longitud de 22 letras del «alephbet»). ¿Habría introducido un solo poeta este tipo de variaciones?
- En cuanto a la nota 3, que Keil diga Jeremías y Driver diga no Jeremías no me sorprende en absoluto. – > Por Frank Luke.
- Tu argumento contra la autoría jeremíaca es ciertamente débil, y puede ser fácilmente refutado, pero el post en general es completo y conciso. – > Por Bach.