Arrays vs Arraylists
Las matrices son la estructura de datos más utilizada para almacenar una colección de elementos. La mayoría de los lenguajes de programación proporcionan métodos para declarar fácilmente matrices y acceder a elementos en las matrices. Una lista de matrices puede verse como una matriz dinámica, que puede aumentar de tamaño. Por esta razón, el programador no necesita conocer el tamaño de la lista de matrices cuando la está definiendo.
¿Qué son las matrices?
En la figura 1, se muestra un fragmento de código que se usa normalmente para declarar y asignar valores a una matriz. La Figura 2 muestra cómo se vería una matriz en la memoria.
valores [0] = 100; valores [1] = 101; valores [2] = 102; valores [3] = 103; valores [4] = 104; |
Figura 1: Código para declarar y asignar valores a una matriz
100 | 101 | 102 | 103 | 104 |
Índice: 0 | 1 | 2 | 3 | 4 |
Figura 2: Matriz almacenada en la memoria
Por encima del código, define una matriz que puede almacenar 5 enteros y se accede a ellos usando índices de 0 a 4. Una propiedad importante de una matriz es que, toda la matriz se asigna como un solo bloque de memoria y cada elemento obtiene su propio espacio en la matriz. Una vez que se define una matriz, se fija su tamaño. Por lo tanto, si no está seguro del tamaño de la matriz en el momento de la compilación, tendrá que definir una matriz lo suficientemente grande como para estar seguro. Pero, la mayoría de las veces, usaremos menos elementos de los que hemos asignado. Por tanto, se desperdicia una cantidad considerable de memoria. Por otro lado, si la "matriz lo suficientemente grande" no es realmente lo suficientemente grande, el programa se bloqueará.
¿Qué son las Arraylists?
Una lista de matrices puede verse como una matriz dinámica, que puede aumentar de tamaño. Por lo tanto, las listas de arrays son ideales para usar en situaciones en las que no se conoce el tamaño de los elementos requeridos en el momento de la declaración. En Java, las listas de matrices solo pueden contener objetos, no pueden contener tipos primitivos directamente (puede poner los tipos primitivos dentro de un objeto o usar las clases contenedoras de los tipos primitivos). Generalmente, las listas de matrices se proporcionan con métodos para realizar la inserción, eliminación y búsqueda. La complejidad temporal de acceder a un elemento es o (1), mientras que la inserción y la eliminación tienen una complejidad temporal de o (n). En Java, las listas de matrices se pueden recorrer usando bucles foreach, iteradores o simplemente usando los índices.
¿Cuál es la diferencia entre Arrays y Arraylists?
Aunque las matrices y las listas de matrices son similares en el sentido de que ambas se utilizan para almacenar colecciones de elementos, difieren en cómo se definen. El tamaño de la matriz se debe proporcionar cuando se define una matriz, pero puede definir una lista de matrices sin conocer el tamaño real. Puede agregar elementos a una lista de matrices después de que esté definida y esto no es posible con matrices. Pero en Java, las listas de matrices no pueden contener tipos primitivos, pero las matrices se pueden usar para contener tipos primitivos. Pero si necesita una estructura de datos que pueda variar su tamaño, arraylist sería la mejor opción.