2012-08-13 33 views
5

Estaba trabajando actualmente con matrices relativamente grandes String. (Aproximadamente 400 x 400 de tamaño) Me preguntaba cómo hacer una matriz igual a otra funciona exactamente. Por ejemplo,Java: cómo funcionan las matrices

String[][] array1 = new String[400][400]; 
String[][] array2 = array1; 

está haciendo una matriz igual a otro lo mismo que bucle a través de cada elemento y por lo que es igual a la posición correspondiente en otra matriz? (Como abajo)

for(int y = 0; y < 400; y++) { 
    for(int x = 0; x < 400; x++) { 
     array2[x][y] = array1[x][y]; 
    } 
} 

Ahora, ¿el método de bucle es lo mismo que hacer una matriz igual a otra? ¿O es el primero/segundo más rápido que el otro? Personalmente, creo que el primero sería más rápido simplemente porque no hay recursión o tener que asignar manualmente memoria a array2 antes de la recursión. Pero no tengo idea de dónde comenzar a buscar esta información y me gustaría entender la logística de cómo Java procesa este tipo de cosas.

+0

Eche un vistazo a [Java Arrays] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html) – adatapost

+3

También creo que está confundido acerca de la definición de recursión. –

+0

Interesante, pero no veo nada al respecto, excepto en la parte inferior, donde menciona el método arrayCopy que no parece tener nada que ver con hacer una matriz igual a otra con un signo igual Doug Ramsey: Probablemente soy porque Realmente no sé CÓMO funcionan las cosas tanto como sé que realmente funcionan ... – CoderTheTyler

Respuesta

12

No, no es lo mismo: las matrices son objetos de referencia, por lo que array2 se convierte en un alias de array1, no en su copia. Cualquier asignación que haga a un elemento de array2 se volverá "visible" a través del array1, y viceversa. Si desea hacer una copia de una matriz de dimensión única, puede usar su método clone(); tenga en cuenta que la copia será superficial, es decir, los elementos individuales de la matriz serán no clonados (haciendo que el truco no se aplique a la matriz 2-D que describió en su publicación).

+0

Wow ... nunca me di cuenta de eso. Eso probablemente podría explicar por qué tantos de mis programas con arreglos no funcionan de la manera que yo quiero. Gracias por la iluminación! – CoderTheTyler

5

no hace copias de los elementos, solo la matriz de referencia. Por lo tanto, array2 y array1 hacen referencia a la misma matriz subyacente.

Esto es muy fácil de determinar por sí mismo:

String[][] array1 = new String[4][4]; 
array1[0][0] = "some string"; 
String[][] array2 = array1; 
array1[0][0] = "another string"; 
System.out.println("array2: " + array2[0][0]); 
array2[0][0] = "a third string"; 
System.out.println("array1: " + array1[0][0]); 
+0

Igual que la respuesta de @ dasblinkenlight pero con un ejemplo. ¡Gracias! :RE – CoderTheTyler

1

Hmm creo que cuando se hace una matriz igual a otra, basta con cambiar la referencia. Por ejemplo:

ARRAY 1 - * [] [] [] [] ... [] [] donde * es una referencia a la matriz 1
Matriz 2 - & [] [] [] [] .. . [] [] donde & es la referencia a la matriz de 2

Entonces red de configuración 1 = array 2 matriz 1 simplemente cambiarán su referencia a & y empezar a leer en la referencia de memoria &

1

la segunda línea el primer ejemplo de código está creando una variable de referencia de tipo String [] que se refiere al mismo objeto de matriz bidimensional que la referencia erence array1 se refiere a. Solo hay una matriz bidimensional en la memoria, pero dos variables de referencia se refieren a ella, array1 y array2.

Pareces confundido acerca de la definición de recursividad, así que te indicaré aquí: Recursion in Computer Science.

Cuestiones relacionadas