ejemplo - ¿Cómo puedo agregar elementos dinámicamente a una matriz de Java?
java array object (11)
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?
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> T[] add(T[] array, T element)
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()));
}
}
}
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);
}
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 una difference 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.
- Convertir matriz a una lista de arrays
- Agregar elemento a la lista de arreglos
- Convierte la nueva lista de arreglos a la matriz
Aquí está la imagen simple de ella
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);
}
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.
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;
}
}
Mira java.util.LinkedList o java.util.ArrayList
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
Probablemente desee utilizar una ArrayList para esto, para una estructura tipo array de tamaño dinámico.
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 ...
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.
Utilice una ArrayList o haga malabares con las matrices para aumentar automáticamente el tamaño de la matriz.