Los ARRAYS son el tipo de colección más sencilla posible. Son estructuras que almacenan una serie de elementos del mismo tipo y cuyo número de elementos es fijo.
Podemos pensar en un ARRAY como una secuencia ordenada de casillas, donde cada casilla contiene un valor específico.
Cada elemento en un ARRAY tiene una posición única llamada índice, que se utiliza para acceder directamente a ese elemento. Por ejemplo, así accederíamos al elemento 06
.
Esto significa que podemos acceder rápidamente a cualquier elemento del array sin necesidad de recorrer todos los elementos previos.
Los ARRAYS son colecciones muy eficientes en cuanto a uso de espacio, y ofrecen un acceso rápido a los elementos.
Cuando usar un array
El uso principal de los ARRAYS es manejar un número fijo de elementos. Principalmente conviene para transferir y almacenar datos entre partes del programa.
Por ejemplo, imagina una función getAlumnos()
que me devuelve una colección con los alumnos de un curso. Los alumnos son los que son, digamos 27.
No quiero que añadas ni elimines alumnos, porque los que son. Así que te devuelvo un ARRAY de longitud fija. Luego ya, tu haces lo que quieras con él.
Por el contrario, para trabajar con una colección lo normal es que usemos un Array Dinámico, que es una versión “mejorada” y mucho más versátil. Pero para intercambiar las colecciones, es mejor usar un array.
Propiedades de los arrays
Propiedad | Lista |
---|---|
Frecuencia con la que lo usaras | 🔺🔺 |
Es mutable | ❌ |
Está ordenado | ✔️ |
Es indexable | ✔️ |
Permite duplicados | ✔️ |
Ejemplos de arrays en distintos lenguajes
Un array tiene tamaño fijo, así que no es posible realizar muchas acciones. Básicamente con un array podemos:
- Crearlos
- Leer elemento en una posición
- Modificar elemento en una posición
- Obtener la longitud
Crear un array
La sintaxis para declarar un array varía según el lenguaje de programación que estemos utilizando. Vamos a ver ejemplos en algunos lenguajes populares,
int[] numeros = new int[5];
int numeros[5];
let numeros = [1, 2, 3, 4, 5];
nombres = [1, 2, 3, 4, 5]
En los ejemplos anteriores, en el caso de C# y C++, hemos creado arrays que pueden almacenar un máximo de 5 elementos.
Sin embargo, no todos los lenguajes tienen arrays de tamaño fijo. Por ejemplo, en el caso de JavaScript y Python, estos arrays serán de tamaño dinámico.
Acceso y manipulación de elementos
Una vez que hemos declarado un array, podemos acceder y manipular sus elementos mediante el uso de índices.
En la mayoría de lenguajes de programación los índices comienzan en 0
. Esto significa que:
- El primer elemento tiene un índice de
0
- El segundo tiene un índice de
1
- Y así sucesivamente…
Para acceder a uno de los elementos, generalmente se usa el operador []
. Vamos a ver unos ejemplos
int primerElemento = numeros[0]; // Accede al primer elemento
int tercerElemento = numeros[2]; // Accede al tercer elemento
auto primerElemento = numeros[0]; // Accede al primer elemento
auto tercerElemento = numeros[2]; // Accede al tercer elemento
let primerElemento = numeros[0]; // Accede al primer elemento
let tercerElemento = numeros[2]; // Accede al tercer elemento
primerElemento = numeros[0]; 'Accede al primer elemento
tercerElemento = numeros[2]; 'Accede al tercer elemento
Al principio os costará acostumbraros a acceder a los elementos empezando por 0. Tranquilos, enseguida se le coge “el truco”
Modificación de elementos de un array
numeros[0] = 10; // Modifica el primer elemento del array
numeros[2] = 20; // Modifica el tercer elemento del array
numeros[0] = 10; // Modifica el primer elemento del array
numeros[2] = 20; // Modifica el tercer elemento del array
numeros[0] = 10; // Modifica el primer elemento del array
numeros[2] = 20; // Modifica el tercer elemento del array
numeros[0] = 10; 'Modifica el primer elemento del array
numeros[2] = 20; 'Modifica el tercer elemento del array
Longitud de un array
En muchos casos, necesitamos saber la cantidad de elementos que contiene un arrays. Para obtener la longitud, podemos utilizar la función o propiedad correspondiente según el lenguaje de programación:
var longitud = numeros.Length;
Los arrays en C++ no tienen propiedad “length” ¡Espero que te acuerdes del número que pusiste al crearlo 😊!
const int ARRAY_SIZE = 5;
int numeros[ARRAY_SIZE];
let longitud = numeros.length;
longitud = len(nombres)
Eficiencia de los arrays intermedio
Un ARRAY es una estructura de datos que almacena elementos de manera contigua en la memoria. La lectura de un elemento en un array es muy eficiente, ya que se puede acceder directamente a través de su índice en tiempo constante O(1)
.
La inserción y eliminación de elementos no existen como operación, porque un array tiene tamaño fijo.
Por otro lado, la búsqueda requiere recorrer todos los elementos en el peor de los casos, lo que también tiene una complejidad de tiempo lineal O(n)
.
Operación | Array |
---|---|
Acceso secuencial | 🟢 |
Acceso aleatorio | 🟢 |
Añadir al principio | ⚫ |
Eliminar al principio | ⚫ |
Añadir al final | 🟢 |
Eliminar al final | 🟢 |
Inserción aleatoria | ⚫ |
Eliminar aleatoria | ⚫ |
Búsqueda | 🔴 |
Leer más sobre eficiencia de colecciones leer más
Funcionamiento interno Avanzado
Cuando se trabaja con un ARRAY generalmente los elementos se reservan en una zona de la menoría contigua.
Al crear el nuevo array (lo cuál puede ocurrir en tiempo de compilación o en tiempo de ejecución) el compilador o el intérprete reserva la memoria necesaria.
Sabemos que el tamaño de un array es fijo. Por otro lado, el tamaño memoria necesario para almacenar cada elemento es conocido por su tipo. Así que el intérprete, o el compilador, sabe cuanta memoria necesaria.
A partir de ahí el “nombre” del array es un alias a la cabecera, o primer elemento del array.
Cuando accedemos al elemento 6
, por ejemplo, el ordenador simplemente tiene que ir a la memoria, donde está el primer elemento, y desplazarse 6 posiciones. Para esto, lógicamente tiene en cuenta el tamaño del elemento almacenado.
Estas operaciones son muy sencillas, y además los ordenadores están muy optimizados para realizarlas. Por ese motivo los array son tan eficientes.