Como posso adicionar dinamicamente itens a um array Java?

No PHP, você pode adicionar dinamicamente elementos a matrizes com o seguinte:

$x = new Array(); $x[] = 1; $x[] = 2; 

Depois disso, $x seria um array como este: {1,2} .

Existe uma maneira de fazer algo semelhante em Java?

Olhe para java.util.LinkedList ou java.util.ArrayList

 List x = new ArrayList(); x.add(1); x.add(2); 

Matrizes em Java têm um tamanho fixo, então você não pode “adicionar algo no final”, como você poderia fazer no PHP.

Um pouco semelhante ao comportamento do PHP é este:

 int[] addElement(int[] org, int added) { int[] result = Arrays.copyOf(org, org.length +1); result[org.length] = added; return result; } 

Então você pode escrever:

 x = new int[0]; x = addElement(x, 1); x = addElement(x, 2); System.out.println(Arrays.toString(x)); 

Mas esse esquema é terrivelmente ineficiente para matrizes maiores , já que faz uma cópia de toda a matriz a cada vez. (E na verdade não é completamente equivalente ao PHP, já que seus antigos arrays permanecem os mesmos).

Os arrays PHP são de fato o mesmo que um Java HashMap com uma “chave max” adicionada, então ele saberia qual tecla usar em seguida, e uma estranha ordem de iteração (e uma estranha relação de equivalência entre as chaves Integer e algumas Strings). Mas para collections indexadas simples, use melhor uma lista em Java, como os outros respondentes propostos.

Se você quiser evitar o uso de List por causa da sobrecarga de empacotar todo int em um Integer, considere o uso de reimplementações de collections para tipos primitivos, que usam matrizes internamente, mas não fará uma cópia em cada alteração, somente quando a matriz interna estiver cheia (assim como ArrayList). (Um exemplo rapidamente googled é esta class IntList .)

Guava contém methods que criam esses wrappers em Ints.asList , Longs.asList , etc.

O Apache Commons tem uma implementação do ArrayUtils para adicionar um elemento no final do novo array:

 /** Copies the given array and adds the given element at the end of the new array. */ public static  T[] add(T[] array, T element) 

Você pode usar um ArrayList e depois usar o método toArray() . Mas dependendo do que você está fazendo, você pode nem precisar de um array. Olhe para ver se as Lists são mais o que você quer.

Veja: Tutorial da Lista de Java

Eu tenho visto essa pergunta com muita frequência na web e, na minha opinião, muitas pessoas com alta reputação não responderam a essas perguntas corretamente. Então eu gostaria de expressar minha própria resposta aqui.

Primeiro devemos considerar que há uma diferença entre array e arraylist .

A questão pede para adicionar um elemento a um array , e não ArrayList


A resposta é bem simples. Isso pode ser feito em 3 etapas.

  1. Converter array para um arraylist
  2. Adicionar elemento ao arrayList
  3. Converter de volta o novo arrayList para o array

Aqui está a foto simples dele insira a descrição da imagem aqui

E finalmente aqui está o código:

Passo 1:

 public List convertArrayToList(String[] array){ List stringList = new ArrayList(Arrays.asList(array)); return stringList; } 

Passo 2:

 public List addToList(String element,List list){ list.add(element); return list; } 

Etapa 3:

 public String[] convertListToArray(List list){ String[] ins = (String[])list.toArray(new String[list.size()]); return ins; } 

Passo 4

 public String[] addNewItemToArray(String element,String [] array){ List list = convertArrayToList(array); list= addToList(element,list); return convertListToArray(list); } 

Você provavelmente vai querer usar uma ArrayList para isso – para uma estrutura parecida com um tamanho dynamic.

Você pode adicionar dinamicamente elementos a uma matriz usando Quadros de Coleção em JAVA. A coleção Framework não funciona em tipos de dados primitivos.

Esta estrutura de coleção estará disponível no pacote “java.util. *”

Por exemplo, se você usa ArrayList,

Crie um object para ele e, em seguida, adicione o número de elementos (qualquer tipo como String, Integer … etc)

 ArrayList a = new ArrayList(); a.add("suman"); a.add(new Integer(3)); a.add("gurram"); 

Agora você foi adicionado 3 elementos a uma matriz.

se você quiser remover qualquer um dos elementos adicionados

 a.remove("suman"); 

novamente se você quiser adicionar qualquer elemento

 a.add("Gurram"); 

Portanto, o tamanho da matriz está aumentando / diminuindo dinamicamente.

Use um ArrayList ou faça malabarismos com os arrays para incrementar automaticamente o tamanho do array.

manter uma contagem de onde você está na matriz primitiva

 class recordStuff extends Thread { double[] aListOfDoubles; int i = 0; void run() { double newData; newData = getNewData(); // gets data from somewhere aListofDoubles[i] = newData; // adds it to the primitive array of doubles i++ // increments the counter for the next pass System.out.println("mode: " + doStuff()); } void doStuff() { // Calculate the mode of the double[] array for (int i = 0; i < aListOfDoubles.length; i++) { int count = 0; for (int j = 0; j < aListOfDoubles.length; j++) { if (a[j] == a[i]) count++; } if (count > maxCount) { maxCount = count; maxValue = aListOfDoubles[i]; } } return maxValue; } } 

Esta é uma maneira simples de adicionar um array em java. Eu usei uma segunda matriz para armazenar minha matriz original e, em seguida, adicionei mais um elemento a ela. Depois disso, passei o array de volta para o original.

  int [] test = {12,22,33}; int [] test2= new int[test.length+1]; int m=5;int mz=0; for ( int test3: test) { test2[mz]=test3; mz++; } test2[mz++]=m; test=test2; for ( int test3: test) { System.out.println(test3); } 

Em Java, o tamanho da matriz é fixo, mas você pode adicionar elementos dinamicamente a uma matriz de tamanho fixo usando seu índice e loop. Por favor, encontre o exemplo abaixo.

 package simplejava; import java.util.Arrays; /** * * @author sashant */ public class SimpleJava { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here try{ String[] transactions; transactions = new String[10]; for(int i = 0; i < transactions.length; i++){ transactions[i] = "transaction - "+Integer.toString(i); } System.out.println(Arrays.toString(transactions)); }catch(Exception exc){ System.out.println(exc.getMessage()); System.out.println(Arrays.toString(exc.getStackTrace())); } } }