Me preguntaba cómo inicializar una matriz de enteros de modo que su tamaño y sus valores cambien durante la ejecución de mi programa, ¿alguna sugerencia?
Me preguntaba cómo inicializar una matriz de enteros de modo que su tamaño y sus valores cambien durante la ejecución de mi programa, ¿alguna sugerencia?
Respuestas:
Sí: use ArrayList .
En Java, las matrices "normales" son de tamaño fijo. Tienes que darles un tamaño y no puedes expandirlos ni contraerlos. Para cambiar el tamaño, debe crear una nueva matriz y copiar los datos que desea, lo cual es ineficiente y molesto para usted.
Afortunadamente, existen todo tipo de clases integradas que implementan estructuras de datos comunes y también otras herramientas útiles. Querrá consultar la API de Java 6 para obtener una lista completa de ellos.
Una advertencia: ArrayList solo puede contener objetos (por ejemplo, enteros), no primitivas (por ejemplo, ints). En la MAYORÍA de los casos, el autoboxing / autounboxing se encargará de esto silenciosamente, pero podría tener un comportamiento extraño dependiendo de lo que esté haciendo.
size
medida que avanza el programa; obtiene el tamaño que tenga size
cuando se ejecuta esa línea.
null
al final. ¿Alguna idea de por qué?
Las matrices en Java son de tamaño fijo. Lo que necesitaría es una ArrayList, una de las colecciones extremadamente valiosas disponibles en Java.
En vez de
Integer[] ints = new Integer[x]
tu usas
List<Integer> ints = new ArrayList<Integer>();
Luego, para cambiar la lista que usa ints.add(y)
y ints.remove(z)
entre muchos otros métodos útiles que puede encontrar en los Javadocs apropiados.
Recomiendo encarecidamente estudiar las clases de Colecciones disponibles en Java, ya que son muy poderosas y le brindan muchas funciones integradas que los principiantes de Java tienden a intentar reescribir innecesariamente.
List<Integer>
lugar de ArrayList<Integer>
?
Las matrices tienen un tamaño fijo una vez creadas. En su lugar, puede utilizar una lista.
Autoboxing hace que una lista se pueda usar de manera similar a una matriz, puede poner simplemente valores int en ella:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
No estoy de acuerdo con las respuestas anteriores que sugieren ArrayList
, porque noArrayList
es una matriz dinámica sino una lista respaldada por una matriz. La diferencia es que no puede hacer lo siguiente:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Le dará una IndexOutOfBoundsException porque todavía no hay ningún elemento en esta posición a pesar de que la matriz de respaldo permitiría tal adición. Por lo tanto, debe usar una implementación de matriz extensible personalizada como lo sugiere @ randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Fuente: Cómo hacer una matriz dinámica.
Se recomienda utilizar List para tratar el tamaño de pequeña escala.
Si tiene una gran cantidad de números, NUNCA use List y autoboxing,
Lista <Entero> lista
Para cada int, se crea automáticamente un nuevo entero. Verá que se vuelve lento cuando aumenta el tamaño de la lista. Estos enteros son objetos innecesarios. En este caso, sería mejor utilizar un tamaño estimado,
int[] array = new int[ESTIMATED_SIZE];
¿Qué tal usar un List
en su lugar? Por ejemplo,ArrayList<integer>
No puede cambiar el tamaño de una matriz. Sin embargo, puede crear una nueva matriz con el tamaño correcto y copiar los datos de la matriz anterior a la nueva.
Pero su mejor opción es usar IntList de jacarta commons. ( aquí )
Funciona igual que una List, pero ocupa menos espacio y es más eficiente que eso, porque almacena int's en lugar de almacenar objetos contenedores sobre int's (eso es lo que es la clase Integer).
Respondí esta pregunta y no, no necesitas una lista de matrices o cualquier otra cosa, esta fue una tarea y la completé, así que sí, las matrices pueden aumentar de tamaño. Aquí está el enlace Cómo usar Java Dynamic Array y aquí está el enlace para mi pregunta a la que respondí Java Dynamic Array
int[] array = new int[size];
size
es una variable, pero la longitud de una matriz debe ser fija, ¿verdad? @Lord Torgamus