Como Adicionar Novos Elementos a um Array em Java

Hassan Saeed 26 dezembro 2022 1 novembro 2020 Java Java Array
  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

  • Como concatenar duas arraias em Java
  • Como converter Byte Array em Hex String em Java
  • Remover duplicatas do array em Java
  • Adicionar objetos a uma matriz em Java
  • A função push() em Java
  • Clonar arrays Java