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.