Redimensionar um array

Como redimensionar um array? Antes mais aconselho a darem uma vista de olhos pela
Collections
framework e verem se há algo que satisfaça os requisitos (e.g. ArrayList
. Não há? Então vamos a isto:

public class Main {
/**
* @param args
*/
public static void main(String[] args) {

//Defino um array com 4 elementos
String[] names = new String[4];
names[0] = "ana";
names[1] = "ines";
names[2] = "carolina";
names[3] = "alice";

/**
* Mas agora por alguma razao recebo a informacao
* de que preciso mais um nome
* A solucao e realocar o array, criando uma estrutura dinamica
*/
String anotherName = "sofia";

//Criar um array temporario
String[] tmp = new String[names.length + 1];

//Copiar o array names para o array tmp
System.arraycopy(names, 0, tmp, 0, names.length);

//Copiar a referencia do array tmp para o array names
names = tmp; //o array tmp esta pronto para ser garbage collected

//A ultima casa do array names esta vazia.Adicionar a String
names[names.length-1] = anotherName;

//Vamos ver o resultado
for(String name: names)
System.out.println(name);
}
}

O resultado é o esperado:

ana
ines
carolina
alice
sofia

Nota final: esta técnica funciona bem para estruturas lineares simples mas para
estruturas mais complexas aconselho vivamente o uso de ArrayList
Em vez de System.arraycopy() poderia ter utilizado um ciclo
for mas System.arraycopy() é mais
rápido por ser implementado em código nativo.

Deixar uma Resposta