Home >> Programación >> Java
En este artículo te voy a explicar cómo insertar un dato al inicio de un array en Java.
Aquí hay dos escenarios posibles: En el primero insertas el dato y pierdes la información previa que existiese en dicha posición. En el segundo desplazas todos los elementos del array para liberar la primera posición antes de insertar el nuevo dato.
Vamos a ver las dos opciones paso a paso:
Insertar un dato al inicio de un array sobrescribiendo el dato anterior
Este es el caso más simple porque lo único que tienes que hacer es insertar el dato en la posición 0 del array sin hacer ningún tipo de comprobación ni operación adicional.
Fíjate en éste código:
int [] nums = new int[6];
nums[0] = 10;
En la línea 1 declaro un array de 6 elementos enteros. En Java, cuando reservas memoria utilizando el operador new los elementos del array se inicializan con el valor «nulo» más apropiado. En el caso de los enteros todos los elementos se inicializan con valor 0.
En la línea 2 accedo a la posición 0 del array usando los corchetes (numeros[0]). En java las posiciones de los arrays empiezan a contarse desde 0, por tanto la posición 0 es la primera. Fíjate que estoy asignando a esa posición el valor 10. Lo que estoy haciendo es insertar en la posición 0 el número 10.
Si muestras el array por pantalla ahora, por ejemplo con este código:
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
Verías algo como esto:
10
0
0
0
0
0
Fíjate ahora en este otro código:
int [] nums = {5,90,23,4,1,8};
nums[0]=10;
Como puedes observar el array ahora tiene una serie de datos iniciales, no está inicializado con ceros como en el caso anterior. ¿Qué ocurrirá ahora cuando inserte el número 10 en la posición 0?
El dato que ocupa la posición 0 inicialmente es el 5. Al hacer la asignación de la línea 2 el 10 sobrescribe el dato original, por lo que el 5 desaparece y se sustituye por el 10.
Si muestras el array por pantalla con el código que te he dicho antes verás algo como esto:
10
90
23
4
1
8
Insertar un dato al inicio de un array desplazando el resto de datos
Vamos ahora a ver la otra opción. Esta es un poquito más compleja porque no queremos perder el dato previo.
Fíjate en el siguiente esquema:
Como habrás notado todos los elementos se desplazan una posición para dejar la primera libre para el nuevo dato, pero hay un problema ¿Qué pasa con el último elemento? El array tiene un tamaño fijo y si intentas mover el último elemento una posición no tendrás espacio para él porque te sales del límite del array. Esto, por supuesto, te dará un error.
Vamos a ver cómo solucionarlo. Fíjate en el siguiente código:
int dato = 10;
int [] nums = new int[0]; //int [] nums = {5,90,23,4,1,8};
int [] auxiliar = new int [nums.length+1];
auxiliar[0]=dato;
for (int i = 0; i < nums.length; i++) {
auxiliar[i+1] = nums[i];
}
nums = auxiliar;
La variable dato de la línea 1 es el dato que queremos insertar en el array.
El array nums declarado en la línea 2 es el array en el que queremos hacer la inserción. Te habrás fijado que tiene tamaño 0. Lo he hecho así porque inicialmente no hay datos y quiero que el array vaya creciendo según lo necesite, pero si lo prefieres puedes cambiarlo por algo como esto: int [] nums = {5,90,23,4,1,8}; (te lo he dejado comentado al lado) porque con lo que te voy a contar va a funcionar igualmente.
Fíjate ahora en la línea 4 del código. Ahí estoy declarando un array auxiliar. Como puedes comprobar el tamaño que estoy reservando es nums.length+1. Esto lo hago así para que reserve exactamente un elemento más que el array original, puesto que quiero insertar un nuevo dato y conservar los anteriores (por ejemplo, si antes había 6 ahora serán 7).
En la siguiente línea inserto el dato en la posición 0 del array auxiliar (auxiliar[0]=dato). Importante que lo hagas en el auxiliar porque si lo haces en el array nums perderás el dato que hubiese en esa posición.
Ahora tenemos que copiar todos los datos del array original a continuación del nuevo dato en el array auxiliar. Eso lo conseguimos con el for de la línea 7. El índice del for se corresponde a las posiciones del array nums. Este array lo tenemos que recorrer entero para copiar todo.
Dentro del cuerpo del for asigno el dato de la posición i de nums en la posición i+1 de auxiliar. ¿Por qué i+1? Recuerda que en la posición 0 del auxiliar está el nuevo dato, por lo que la posición 0 de nums se debe copiar en la 1 de auxiliar, la 1 de nums en la 2 de auxiliar y así sucesivamente hasta copiar todos:
Una vez se completen todas las iteraciones del bucle for el nuevo array auxiliar tendrá el resultado que buscamos: el primer dato en la primera posición y el resto a continuación. Ahora solo falta volcar todo al array original que es el que realmente nos interesa. Es tan sencillo como asignar auxiliar a nums (línea 11).
Y con esto estaría resulto. Puedes comprobar el resultado mostrando el array nums por pantalla con el siguiente código:
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
Espero que te haya servido.
Te espero en el próximo artículo sobre Java. Mientras puedes echarle un ojo al resto de artículos sobre Java que tengo publicados aquí.