Pregunta ¿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 este, $x sería una matriz como esta: {1,2}.

¿Hay alguna manera de hacer algo similar en Java?


75
2018-02-21 02:28


origen


Respuestas:


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

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

100
2018-02-21 02:32



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 quieres evitar el uso List Debido a la sobrecarga de ajustar cada int en un Entero, considere usar 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 (como ArrayList). (Un ejemplo rápido en Google es esta clase IntList.)

La guayaba contiene métodos para crear tales envoltorios en Ints.asList, Longs.asList, etc.


63
2018-02-21 15:13



Apache Commons tiene un ArrayUtils implementación 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> T[] add(T[] array, T element)

17
2017-08-25 12:59



Puedes usar un ArrayList y luego usa el toArray() método. Pero dependiendo de lo que esté haciendo, es posible que ni siquiera necesite una matriz. Mire para ver si Lists son más lo que quieres

Ver: Tutorial de la lista de Java


11
2018-02-21 02:34



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 expresar mi propia respuesta aquí.

Primero debemos considerar que hay un diferencia Entre array y arraylist.

La pregunta requiere agregar un elemento a una matrizy 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<String> convertArrayToList(String[] array){
        List<String> stringList = new ArrayList<String>(Arrays.asList(array));
        return stringList;
    }

Paso 2:

public  List<String> addToList(String element,List<String> list){

            list.add(element);
            return list;
    }

Paso 3:

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

Etapa 4

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

9
2018-01-30 14:16



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


5
2018-02-21 02:32



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("suman");
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("suman");

de nuevo si quieres agregar cualquier elemento

a.add("Gurram");

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


4
2017-08-25 13:18



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


1
2018-02-21 03:07



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;
    }
}

0
2018-01-04 15:18