Como Adicionar Novos Elementos a um Array em Java

Hassan Saeed 12 outubro 2023
  1. Utilize uma ArrayList
  2. Criar um novo ArrayList maior
Como Adicionar Novos Elementos a um Array em Java

Este tutorial discute como adicionar novos elementos a uma array em Java.

Array em Java é um objeto recipiente que contém um número fixo de elementos do mesmo tipo de dados. O comprimento do array é definido ao declarar o objeto array, e não pode ser alterado posteriormente.

Suponha que tenhamos um array de comprimento 5 em Java instanciado com alguns valores:

String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";

Agora há um requisito para adicionar um sexto elemento ao nosso array. Vamos tentar adicionar este 6° elemento ao nosso array.

arr[5] = "6";

A linha de código acima dá o seguinte erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5

Isto porque inicialmente declaramos o array como sendo de tamanho 5 e tentamos adicionar um 6° elemento a ele.

Não se preocupe, há 2 soluções possíveis para fazer isso. Podemos utilizar uma ArrayList em vez de um array ou criar um novo array maior para acomodar novos elementos.

Utilize uma ArrayList

Uma solução melhor e recomendada é utilizar uma ArrayList em vez de uma array, uma vez que é redimensionável. Não há um tamanho fixo de ArrayList, portanto sempre que houver a necessidade de adicionar um novo elemento, você pode simplesmente adicionar executando 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);
  }
}

O código acima produz o seguinte.

Initial ArrayList : [ 1, 2, 3, 4, 5 ] Modified ArrayList : [ 1, 2, 3, 4, 5, 6, 7 ]

Ou se já tivermos um array, também podemos criar uma ArrayList diretamente.

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);
  }
}

O código acima produz o seguinte.

Initial ArrayList : [ 1 ] Modified ArrayList : [ 1, 2, 3 ]

Podemos facilmente converter uma ArrayList de volta para um 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);
  }
}

Criar um novo ArrayList maior

Se insistirmos em trabalhar somente com arrays, podemos utilizar o método java.util.Arrays.copyOf para criar uma array maior e acomodar um novo elemento. Vamos utilizar o array arr que criamos acima e adicionar um novo elemento a ele no exemplo abaixo.

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));
  }
}

O código acima nos permite o seguinte.

Initial Array : [ 1, 2, 3, 4, 5 ] Modified Array : [ 1, 2, 3, 4, 5, 6 ]

Se mais tarde sentirmos a necessidade de adicionar outro elemento ao arr, teremos que repetir o bloco de código acima novamente!

Portanto, esta solução não é recomendada porque a adição de cada novo elemento tem uma complexidade temporal de O(n) uma vez que tem que copiar todos os elementos do array anterior para um novo array. Por outro lado, a adição de cada novo elemento utilizando ArrayList tem O(1) custo amortizado por operação.

Artigo relacionado - Java Array