Tecnología

Inicio

Colección de Java Tutoriales

Un error común de los nuevos programadores es almacenar todas las colecciones de datos en arreglos simples. Mientras que la matriz básica es una gran estructura de datos, que tiene una serie de deficiencias que se puede evitar mediante el uso de algunas de las otras estructuras de datos básicos. Java Collections Framework proporciona un conjunto de interfaces y clases fáciles de usar que implementan algunas de las estructuras de datos más comunes en la informática.

matriz básica

Lo mejor de una matriz básica en Java es que puede leer y escribir de forma rápida. Sin embargo, la adición de forma permanente o la eliminación de un elemento de la matriz requiere una gran cantidad de tiempo, porque Java no soporta matrices dinámicas. Cada vez que se cambia el tamaño de un array en Java, se debe reconstruir la matriz de nuevo desde cero, un elemento a la vez, con un bucle. Usted puede evitar esto siempre inicializar las matrices con el tamaño máximo requerido en cualquier momento durante el tiempo de ejecución, sino que puede ser una pérdida dramática de la memoria y es sólo un mal diseño en general.

Lista de arreglo

La clase ArrayList de la biblioteca java.util aborda algunos de estos problemas envolviendo un conjunto de funciones de administrador en torno a una matriz oculta. Esta matriz se incrementa estratégicamente y la disminución en el tamaño periódicamente de modo que, en promedio, la adición y eliminación de elementos se produce muy rápidamente. Pero de vez en cuando, el, matriz interna oculta simplemente tiene que ser redimensionado, y en esos casos, la operación requerirá una cantidad mucho mayor de tiempo.

Lista enlazada

El LinkedList va más allá de la ArrayList y en realidad tiene ninguna matriz que sea, oculta o no. En su lugar, los registros están encadenados juntos en margarita nodos, con cada nodo que contiene una referencia a la dirección de memoria de la siguiente. La ventaja de una LinkedList es que la adición o eliminación de nuevas piezas de datos siempre se produce muy rápidamente el tiempo y no hay nunca ningún cambio de tamaño de un array a realizar. Sin embargo, es imposible acceder a los datos en el medio de la lista, sin pasar por toda la lista de la parte delantera o trasera, por lo que el tiempo que se necesita para leer datos desde el medio de una LinkedList puede ser significativo.

El ArrayList permite que los datos en cualquier lugar dentro de ella para acceder muy rápidamente, y por lo general se puede cambiar el tamaño de forma rápida, pero a veces requiere tiempo adicional cuando su matriz interna necesita ser reconstruido. El LinkedList siempre se puede añadir y eliminar los datos de la lista muy rápidamente, pero la recuperación de datos desde la mitad de la lista puede llevar mucho tiempo. Esto hace que el LinkedList una buena opción para pilas y colas que sólo se puede acceder en la parte delantera o trasera, pero el ArrayList una mejor opción como un reemplazo general por la sencilla matriz.

HashSet

El HashSet, como tanto el ArrayList y LinkedList, permite que los datos pueden agregar y quitar muy, muy rápidamente, y también tiene una ventaja más: un HashSet se puede buscar de forma extremadamente rápida, más rápido que un arrays, ArrayLists, o LinkedLists. Esto se hace mediante la realización de una operación matemática en un pedazo de datos para determinar su índice en una matriz, y luego realizar la misma operación en los datos que se deben buscar para obtener el índice de los datos deseados.

Si esto es confuso, no se preocupe. Lo importante es que HashSets son grandes para los conjuntos de datos que deberán ser buscado a través de una y otra. Pero también tienen una debilidad significativa: a HashSet no mantiene el orden de los datos que se colocan en él, y el orden de los elementos en el conjunto pueden cambiar de un momento a otro. Por ejemplo, en una matriz básica, si un elemento se coloca en el índice 0, el programador puede contar con ello queda en el índice 0 para siempre hasta que lo cambie. Pero en un HashSet, un elemento en el índice 0 en un momento bien puede ser en el índice 327 en el momento siguiente.