Me preguntaba cómo inicializar una matriz de enteros de modo que su tamaño y valores cambien a lo largo de la ejecución de mi programa, ¿alguna sugerencia?Arrays de longitud variable (dinámica) en Java
Respuesta
Sí: use ArrayList.
En Java, las matrices "normales" son de tamaño fijo. Tienes que darles un tamaño y no puedes expandirlos o contraerlos. Para cambiar el tamaño, debe crear una nueva matriz y copiar los datos que desee, lo que es ineficiente y le resulta doloroso.
Afortunadamente, hay todo tipo de clases integradas que implementan estructuras de datos comunes, y otras herramientas útiles también. Deberá verificar the Java 6 API para obtener una lista completa de ellos.
Una advertencia: ArrayList solo puede contener objetos (por ejemplo, enteros), no primitivos (por ejemplo, enteros). En la mayoría de los casos, autoboxing/autounboxing se encargará de esto por usted en silencio, pero podría tener un comportamiento extraño dependiendo de lo que esté haciendo.
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 utilizar IntList de jacarta commons. (here)
Funciona igual que una lista, pero ocupa menos espacio y es más eficiente que eso, porque almacena int en lugar de almacenar objetos wrapper sobre int (eso es lo que es la clase Integer).
¿Qué tal si usas un List
? Por ejemplo, ArrayList<integer>
Las matrices son de tamaño fijo una vez instanciadas. Puedes usar una lista en su lugar.
Autoboxing hacer una lista utilizable similar a una matriz, se puede poner simplemente los valores int en él:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
¿Por qué declaras una variable de referencia de tipo Lista, y no ArrayList? – LppEdd
Dado que le permite simplemente cambiar entre implementaciones de listas si es necesario, solo tiene que cambiar la nueva XYZList(). Si la variable se declara como ArrayList, oyu puede usar métodos específicos para esta implementación, lo que hace un cambio más complicado. – Mnementh
Gracias, lo entiendo. – LppEdd
matrices en Java son de tamaño fijo. Lo que necesitaría es una ArrayList, una de las colecciones más valiosas disponibles en Java.
En lugar de
Integer[] ints = new Integer[x]
que utilizan
List<Integer> ints = new ArrayList<Integer>();
A continuación, cambiar la lista utiliza ints.add(y)
y ints.remove(z)
entre muchos otros métodos útiles se pueden encontrar en el Javadocs apropiado.
Recomiendo estudiar las clases de colecciones disponibles en Java, ya que son muy potentes y le dan mucha funcionalidad incorporada que los novatos de Java tienden a intentar reescribir innecesariamente.
quiero trabajar hasta que intenté: List
¿Por qué usas 'List
Respondí esta pregunta y no necesitas una lista de arrays ni ninguna otra cosa, esta era una tarea y la completé para que las matrices puedan aumentar de tamaño.Aquí está el enlace How to use Java Dynamic Array y aquí está el enlace de mi pregunta lo que respondí Java Dynamic arrays
esto es simplemente incorrecto. la respuesta vinculada llama a System.arrayCopy(), copia la matriz anterior en una nueva con mayor tamaño y luego agrega la nueva entrada. las matrices aún no pueden tener un tamaño dinámico. – katzenhut
estoy de acuerdo con las respuestas anteriores sugiriendo ArrayList
, porque ArrayList
es no una matriz dinámica pero hay una lista apoyada por una matriz. La diferencia es que no se puede hacer lo siguiente:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
que le dará un IndexOutOfBoundsException porque no hay ningún elemento en este puesto aún a pesar de que la matriz de soporte permitiría tal adición. Así que hay que utilizar una implementación de matriz personalizada extensible como el sugerido por @ Randy-lance
Creo que quería vincularlo a http://codereply.com/answer/6i5bur/java-dynamic-arrays.html –
No estoy seguro si ArrayList tiene algún método put como veo en el código fuente Java8. Solo trato de descubrir cómo se comporta con la capacidad dada. Sin embargo, se encontró el método ArrayList.add(). –
Es recomendable utilizar la lista para hacer frente a tamaño de pequeña escala.
Si usted tiene una gran cantidad de números, NUNCA Lista uso y autoboxing,
Lista < Integer> lista
Para cada int, un nuevo entero se ha creado automáticamente. Le resultará cada vez más lento cuando aumente el tamaño de la lista. Estos enteros son objetos innecesarios. En este caso, utilizar un tamaño estimado sería mejor,
int[] array = new int[ESTIMATED_SIZE];
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: How to make dynamic array
- 1. Arrays de longitud variable en C89?
- 2. ¿Controles de límites para arrays de longitud variable (VLA)?
- 3. Arrays de longitud cero en VBScript
- 4. C longitud de cadena dinámica
- 5. Java: Arrays & Vectors
- 6. Java ArrayList of Arrays?
- 7. Arrays Java comparando
- 8. Arreglo de longitud variable
- 9. longitud y longitud() en Java
- 10. Iteración a través de una matriz Java de longitud variable
- 11. Java Beans: ¿Arrays asociativos sobreglorificados?
- 12. Variable aleatoria dinámica de Jmeter
- 13. PHP argumentos de longitud variable?
- 14. argumentos de longitud variable C#
- 15. declaración de matriz dinámica en java
- 16. Java Arrays Index fuera de los límites
- 17. longitud de la matriz en Java
- 18. Nueva variable dinámica en C# 4.0
- 19. ¿Sobrecarga de la matriz de longitud variable en C++?
- 20. Java Optimization String vs Char Arrays
- 21. Buscando biblioteca de emulación Arrays Typed Arrays
- 22. Asignación dinámica de método/Método como variable
- 23. En PyTables, ¿cómo crear una matriz anidada de longitud variable?
- 24. Codificación de entero de longitud variable
- 25. Buscar una expresión regular en una lista de arrays java
- 26. Java función dinámica llamando
- 27. cadenas de recarray numpy de longitud variable
- 28. Java anotación tipografía dinámica
- 29. Espacio de longitud variable utilizando printf
- 30. Función de invocación dinámica en java
Me pregunto por qué siguiente código es correcto en Java? 'int [] array = new int [size];' 'size' es una variable, pero la longitud de una matriz debe ser fija, ¿estoy en lo cierto? @Lord Torgamus –
@jerry_sjtu Sí, la matriz no cambia de tamaño a emparejar 'size' mientras el programa continúa; obtiene cualquier tamaño que esté en 'tamaño' cuando se ejecuta esa línea. – Pops
Cada vez que elimino un elemento de una ArrayList, termino con un 'null' al final. ¿Alguna idea de por qué? –