Cómo añadir nuevos elementos a un array en Java

Hassan Saeed 12 octubre 2023
  1. Usar una ArrayList
  2. Crear un nuevo array más grande
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.

Artículo relacionado - Java Array