¿Cómo puedo agregar elementos dinámicamente a una matriz de Java?

En PHP, puede agregar dinámicamente elementos a las matrices de la siguiente manera:

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

Después de esto, $x sería una matriz como esta: {1,2} .

¿Hay alguna manera de hacer algo similar en Java?

Mira java.util.LinkedList o java.util.ArrayList

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

Las matrices en Java tienen un tamaño fijo, por lo que no se puede “agregar algo al final” como se podría hacer en PHP.

Un poco similar al comportamiento de PHP es este:

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

Entonces puedes escribir:

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

Pero este esquema es terriblemente ineficiente para matrices más grandes , ya que hace una copia de la matriz completa cada vez. (Y de hecho no es completamente equivalente a PHP, ya que las matrices anteriores siguen siendo las mismas).

Los arrays de PHP son de hecho bastante iguales a un HashMap de Java con una “clave máxima” añadida, por lo que sabría qué tecla usar a continuación y un orden de iteración extraño (y una extraña relación de equivalencia entre las claves de Entero y algunas Cadenas). Pero para colecciones indexadas simples, mejor use una Lista en Java, como las otras respuestas propuestas.

Si desea evitar el uso de List debido a la sobrecarga de ajustar cada int en un Entero, considere el uso de reimplementaciones de colecciones para tipos primitivos, que usan matrices internamente, pero no harán una copia en cada cambio, solo cuando la matriz interna esté llena (al igual que ArrayList). (Un ejemplo rápido en Google es esta clase IntList ).

Guava contiene métodos para crear dichos contenedores en Ints.asList , Longs.asList , etc.

Apache Commons tiene una implementación ArrayUtils para agregar un elemento al final de la nueva matriz:

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

Puede usar una ArrayList y luego usar el método toArray() . Pero dependiendo de lo que esté haciendo, es posible que ni siquiera necesite una matriz. Observe si las Lists son más de lo que desea.

Ver: Tutorial de la lista de Java

He visto esta pregunta muy a menudo en la web y, en mi opinión, muchas personas con gran reputación no respondieron estas preguntas correctamente. Entonces me gustaría express mi propia respuesta aquí.

Primero debemos considerar que hay una diferencia entre array y arraylist .

La pregunta requiere agregar un elemento a una matriz , y no ArrayList


La respuesta es bastante simple. Se puede hacer en 3 pasos.

  1. Convertir matriz a una lista de arrays
  2. Agregar elemento a la lista de arreglos
  3. Convierte la nueva lista de arreglos a la matriz

Aquí está la imagen simple de ella enter image description here

Y finalmente aquí está el código:

Paso 1:

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

Paso 2:

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

Paso 3:

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

Etapa 4

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

Probablemente desee utilizar una ArrayList para esto, para una estructura tipo array de tamaño dynamic.

Puede agregar elementos dinámicamente a una matriz usando Collection Frameworks en JAVA. El Framework de recolección no funciona en tipos de datos primitivos.

Este marco de Colección estará disponible en el paquete “java.util. *”

Por ejemplo, si usa ArrayList,

Cree un objeto para él y luego agregue el número de elementos (cualquier tipo como Cadena, Entero … etc.)

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

Ahora se agregaron 3 elementos a una matriz.

si quieres eliminar alguno de los elementos añadidos

 a.remove("sumn"); 

de nuevo si quieres agregar cualquier elemento

 a.add("Gurram"); 

Entonces, el tamaño de la matriz se está incrementando / disminuyendo dinámicamente …

Utilice una ArrayList o haga malabares con las matrices para boost automáticamente el tamaño de la matriz.

Mantenga un conteo de dónde se encuentra en la 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 es una forma simple de agregar a una matriz en Java. Usé una segunda matriz para almacenar mi matriz original, y luego agregué un elemento más a ella. Después de eso, pasé esa matriz a la 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); } 

En Java, el tamaño de la matriz es fijo, pero puede agregar elementos dinámicamente a una matriz de tamaño fijo utilizando su índice y para el ciclo. Por favor, encuentra el ejemplo a continuación.

 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())); } } } 
    Intereting Posts