La lista de arreglos y la lista enlazada son términos comunes cuando se trata de almacenamiento y recuperación de datos. Aunque hay muchos dispositivos de almacenamiento, en última instancia, dependen del mecanismo de almacenamiento. Estos dos mecanismos de almacenamiento colocan sus datos en los dispositivos de almacenamiento y los recuperan cuando sea necesario. Echemos un vistazo a cómo almacenan los datos en su memoria. La lista de Arrays utiliza un almacenamiento secuencial, y los datos se almacenan uno tras otro. Esta es quizás una forma más simple de almacenamiento: evita la confusión. Sí, podemos recuperar el siguiente elemento o datos de la siguiente ubicación de memoria de la lista de arreglos; sin embargo, se almacena con la ayuda de punteros en la lista Vinculada. Aquí necesitamos dos ubicaciones de memoria para el almacenamiento: una para los datos y otra para el puntero. Un puntero se dirige a la ubicación de la memoria de los siguientes datos. Podemos comprender fácilmente que la Lista vinculada nunca almacena datos de forma secuencial; más bien, utiliza un mecanismo de almacenamiento aleatorio. Los punteros son los elementos clave para ubicar las ubicaciones de datos en la memoria.
Ya hemos discutido cómo ambos mecanismos de almacenamiento ponen datos y podemos dar un término 'matriz dinámica' para el esquema de almacenamiento interno de la lista de Array. Solo coloca las piezas de datos una detrás de la otra, de ahí el nombre, mientras que la lista Vinculada utiliza una lista interna con la ayuda de punteros para rastrear el siguiente elemento. Por lo tanto, utiliza una lista enlazada interna, como una lista enlazada simple o doble para mostrarnos los siguientes datos.
Como la lista de Arrays solo almacena los datos reales, necesitamos espacio solo para los datos que almacenamos. A la inversa, en la lista Vinculada, también usamos punteros. Por lo tanto, se requieren dos ubicaciones de memoria, y podemos decir que la lista vinculada consume más memoria que la lista de Array. Un lado ventajoso de la lista Vinculada es que nunca requiere ubicaciones de memoria continua para almacenar nuestros datos, a diferencia de la lista de Arreglos. Los punteros son capaces de mantener la posición de la siguiente ubicación de datos, e incluso podemos usar ranuras de memoria más pequeñas que no son continuas. Cuando se trata del uso de la memoria, los punteros desempeñan el papel principal en la lista Vinculada, y también lo hace la eficacia de ellos..
Con la lista de Arrays, incluso una lista vacía requiere un tamaño de 10, pero con una lista Vinculada, no necesitamos un espacio tan grande. Podemos crear una lista vinculada vacía con un tamaño de 0. Más adelante, podemos aumentar el tamaño según sea necesario.
La recuperación de datos es más simple en la lista de Array, ya que se almacena secuencialmente. Todo lo que hace es identificar la primera ubicación de datos; desde allí, se accede secuencialmente a la siguiente ubicación para recuperar el resto. Se calcula como la primera posición de datos + 'n', donde 'n' es el orden de los datos en la lista Array. La lista vinculada refiere el puntero inicial para encontrar la primera ubicación de datos, y desde allí se refiere al puntero asociado con cada información para encontrar la siguiente ubicación de datos. El proceso de recuperación depende principalmente de los punteros aquí, y efectivamente nos muestran la siguiente ubicación de datos.
La lista de Arrays usa un valor nulo para marcar el final de los datos, mientras que la lista Vinculada usa un puntero nulo para este propósito. Tan pronto como el sistema reconoce datos nulos, la lista de Arrays detiene la próxima recuperación de datos. De manera similar, el puntero nulo impide que el sistema continúe con la próxima recuperación de datos.
La lista vinculada nos permite recorrer las direcciones inversas con la ayuda de descentador (). Sin embargo, no tenemos una instalación de este tipo en una lista de Arrays: el recorrido inverso se convierte en un problema aquí.
Veamos la sintaxis de Java de ambos mecanismos de almacenamiento..
Creación de lista de arrays:
List arraylistsample = new ArrayList ();
Agregando objetos a la lista de arrays:
Arraylistsample.add ("name1");
Arraylistsample.add ("name2");
Así es como se verá la lista de Arreglos resultante - [nombre1, nombre2].
Creación de listas enlazadas:
List linkedlistsample = new linkedList ();
Agregando objetos a la lista enlazada:
Linkedlistsample.add ("name3");
Linkedlistsample.add ("name4");
Así es como se verá la lista Vinculada resultante - [nombre3, nombre4].
La lista de Arrays toma O (1) tiempo para ejecutar cualquier búsqueda de datos, mientras que la lista Vinculada toma u O (n) para la nth búsqueda de datos. Por lo tanto, una lista de Arrays siempre usa un tiempo constante para cualquier búsqueda de datos, pero en la lista Vinculada, el tiempo tomado depende de la posición de los datos. Por lo tanto, las listas de Arrays siempre son una mejor opción para las operaciones de Obtener o Buscar.
Tanto la Lista de Arrays como la Lista Vinculada toman O (1) tiempo para la adición de datos. Pero si la matriz está llena, entonces la lista de Arrays toma una cantidad de tiempo considerable para redimensionarla y copiar los elementos a la más nueva. En tal caso, la lista Vinculada es la mejor opción..
La operación de eliminación lleva casi la misma cantidad de tiempo tanto en la lista de Arrays como en la lista Vinculada. En la lista de Arreglos, esta operación elimina los datos y luego cambia la posición de los datos para formar el arreglo más nuevo, esto lleva O (n) tiempo. En la lista Vinculada, esta operación atraviesa los datos particulares y cambia las posiciones del puntero para formar la lista más nueva. El tiempo para el recorrido y la eliminación es O (n) aquí también.
Sabemos que una lista de Arrays usa una matriz interna para almacenar los datos reales. Por lo tanto, si se borra cualquier dato, entonces todos los datos próximos necesitan un cambio de memoria. Obviamente, esto requiere una cantidad considerable de tiempo y ralentiza las cosas. Dicho cambio de memoria no es necesario en la lista Vinculada, ya que todo lo que hace es cambiar la ubicación del puntero. Por lo tanto, una lista vinculada es más rápida que una lista de arreglos en cualquier tipo de almacenamiento de datos. Sin embargo, esto depende únicamente del tipo de operación, es decir, para la operación Obtener o Buscar, la lista Vinculada lleva mucho más tiempo que una lista de Array. Cuando observamos el rendimiento general, podemos decir que la lista Vinculada es más rápida.
Una lista de Arrays es más adecuada para requerimientos de datos más pequeños donde la memoria continua está disponible. Pero cuando tratamos con grandes cantidades de datos, la disponibilidad de memoria continua implementa los mecanismos de almacenamiento de datos, ya sea pequeño o enorme. A continuación, decida cuál elegir: la lista Array o la lista Vinculada. Puede seguir adelante con una lista de arreglos cuando solo necesite almacenamiento y recuperación de datos. Pero una lista puede ayudarte más allá de eso manipulando datos. Una vez que decida con qué frecuencia se requiere la manipulación de datos, es importante verificar qué tipo de recuperación de datos realiza habitualmente. Cuando solo se trata de Obtener o Buscar, entonces la Lista de Arrays es la mejor opción; para otras operaciones como Inserción o Eliminación, continúe con la lista Vinculada.
Veamos las diferencias en forma tabular..
S.No | Conceptos | Diferencias | |
Lista de arreglo | Lista enlazada | ||
1 | Moda de almacenamiento de datos | Utiliza almacenamiento de datos secuencial. | Utiliza almacenamiento de datos no secuencial. |
2 | Esquema de almacenamiento interno | Mantiene una matriz dinámica interna | Mantiene una lista enlazada |
3 | Uso de memoria | Requiere espacio de memoria solo para los datos. | Requiere espacio de memoria para los datos y para los punteros |
4 | Tamaño de la lista inicial | Necesita espacio para al menos 10 artículos. | No necesita espacio e incluso podemos crear una lista enlazada vacía de tamaño 0. |
5 | Recuperación de datos | Se calcula como la primera posición de datos + 'n', donde 'n' es el orden de los datos en la lista Array | Recorrido desde la primera o la última hasta que se requieran los datos requeridos |
6 | Fin de los datos | Los valores nulos marcan el final. | El puntero nulo marca el final. |
7 | Recorrido inverso | No lo permite | Lo permite con la ayuda de descendingiterator (). |
8 | Sintaxis de creación de listas | List arraylistsample = new ArrayList ();
| List linkedlistsample = new linkedList ();
|
9 | Añadiendo objetos | Arraylistsample.add ("name1");
| Linkedlistsample.add ("name3");
|
10 | Obtener o buscar | Toma O (1) tiempo y es mejor en rendimiento | Toma O (n) el tiempo y el rendimiento depende de la posición de los datos |
11 | Insertar o añadir | Consume O (1) tiempo, excepto cuando la matriz está llena | Consume O (1) tiempo bajo cualquier circunstancia. |
12 | Eliminación o eliminación | Toma O (n) tiempo | Toma O (n) tiempo |
13 | Cuándo usar? | Cuando hay muchas operaciones Get o Search involucradas; La disponibilidad de memoria debería ser mayor incluso al inicio. | Cuando hay muchas operaciones de Insertar o Eliminar, y la disponibilidad de memoria no necesita ser continua |