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?
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.
int[] array = new int[size];
size
es una variable, pero la longitud de una matriz debe ser fija, ¿verdad? @Lord Torgamussize
medida que avanza el programa; obtiene el tamaño que tengasize
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
tu usas
Luego, para cambiar la lista que usa
ints.add(y)
yints.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.
fuente
List<Integer>
lugar deArrayList<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:
fuente
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: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
fuente
Fuente: Cómo hacer una matriz dinámica.
fuente
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,
fuente
¿Qué tal usar un
List
en su lugar? Por ejemplo,ArrayList<integer>
fuente
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).
fuente
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
fuente