Cómo añadir nuevos elementos a un array en Java
Este tutorial trata sobre cómo añadir nuevos elementos a un conjunto en Java.
Array
en Java es un objeto contenedor que contiene un número fijo de elementos del mismo tipo de datos. La longitud del array se define mientras se declara el objeto array, y no puede ser modificada posteriormente.
Supongamos que tenemos un array de longitud 5 en Java instanciado con algunos valores:
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
Ahora hay un requisito para añadir un 6º elemento a nuestro array. Intentemos añadir este 6º elemento a nuestra array.
arr[5] = "6";
La línea de código anterior da el siguiente error:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
Esto se debe a que declaramos el array de tamaño 5 inicialmente e intentamos añadir un 6º elemento a la misma.
No te preocupes, hay dos posibles soluciones para hacer esto. Podemos usar una ArrayList
en lugar de un array o crear un nuevo array más grande para acomodar nuevos elementos.
Usar una ArrayList
Una solución mejor y más recomendada es usar una ArrayList
en lugar de un array ya que es redimensionable. No hay un tamaño fijo de ArrayList
por lo que cuando haya necesidad de añadir un nuevo elemento puedes simplemente añadirlo ejecutando testList.add(element)
.
import java.util.*;
public class Main {
public static void main(String args[]) {
List<String> testList = new ArrayList<String>();
testList.add("1");
testList.add("2");
testList.add("3");
testList.add("4");
testList.add("5");
// Print the original list
System.out.println("Initial ArrayList:\n" + testList);
// Add elements without running into any error
testList.add("6");
testList.add("7");
// Print the list after adding elements
System.out.println("Modified ArrayList:\n" + testList);
}
}
El código anterior da como resultado lo siguiente.
Initial ArrayList : [ 1, 2, 3, 4, 5 ] Modified ArrayList : [ 1, 2, 3, 4, 5, 6, 7 ]
O si ya tenemos un array, también podemos crear una ArrayList
directamente.
import java.util.*;
public class Main {
public static void main(String args[]) {
// Create an array
String[] arr = new String[1];
arr[0] = "1";
// Convert to ArrayList
List<String> testList = new ArrayList<>(Arrays.asList(arr));
// Print the original list
System.out.println("Initial ArrayList:\n" + testList);
// Add elements to it
testList.add("2");
testList.add("3");
// Print the list after adding elements
System.out.println("Modified ArrayList:\n" + testList);
}
}
El código anterior da como resultado lo siguiente.
Initial ArrayList : [ 1 ] Modified ArrayList : [ 1, 2, 3 ]
Podemos convertir fácilmente una ArrayList
en un array.
import java.util.*;
public class Main {
public static void main(String args[]) {
// Create an array
String[] arr = new String[1];
arr[0] = "1";
// Convert to ArrayList
List<String> testList = new ArrayList<>(Arrays.asList(arr));
// Add elements to it
testList.add("2");
testList.add("3");
// Convert the arraylist back to an array
arr = new String[testList.size()];
testList.toArray(arr);
}
}
Crear un nuevo array más grande
Si insistimos en trabajar sólo con arrays, podemos usar el método java.util.Arrays.copyOf
para crear un array más grande y acomodar un nuevo elemento. Usemos el array arr
que creamos arriba y añadamos un nuevo elemento en el ejemplo de abajo.
import java.util.*;
public class Main {
public static void main(String args[]) {
// Create an array
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
// print the original array
System.out.println("Initial Array:\n" + Arrays.toString(arr));
// Steps to add a new element
// Get the current length of the array
int N = arr.length;
// Create a new array of length N+1 and copy all the previous elements to this new array
arr = Arrays.copyOf(arr, N + 1);
// Add a new element to the array
arr[N] = "6";
// print the updated array
System.out.println("Modified Array:\n" + Arrays.toString(arr));
}
}
El código anterior da como resultado lo siguiente.
Initial Array : [ 1, 2, 3, 4, 5 ] Modified Array : [ 1, 2, 3, 4, 5, 6 ]
Si más tarde sentimos la necesidad de añadir otro elemento a arr
, tendremos que repetir el bloque de código anterior otra vez!
Por lo tanto, esta solución no es recomendable porque la adición de cada nuevo elemento tiene una complejidad de tiempo de O(n)
, ya que tiene que copiar todos los elementos del array anterior a una nueva array. Por otro lado, la adición de cada nuevo elemento usando ArrayList
tiene O(1)
costo amortizado por operación.