2012-08-13 20 views
5

Oggi stavo lavorando con array String relativamente grandi. (Circa 400 x 400 di dimensioni) Mi chiedevo come rendere esattamente un array uguale ad un altro. Ad esempio,Java: funzionamento degli array

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

sta compiendo un array uguale all'altro la stessa cosa scorrendo ogni elemento e rendendola uguale alla rispettiva posizione in un'altra matrice? (Come di seguito)

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

Ora il metodo di ciclo equivale a fare un array uguale all'altro? O è il primo/secondo più veloce dell'altro? Personalmente, penso che il primo sarebbe più veloce solo perché non c'è ricorsione o dover allocare manualmente la memoria a array2 prima della ricorsione. Ma non ho idea di dove iniziare a cercare queste informazioni e vorrei capire la logistica di come Java elabora questo tipo di cose.

+0

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

+3

Penso anche che tu sia confuso riguardo alla definizione di ricorsione. –

+0

Interessante, ma non vedo nulla a riguardo, tranne in fondo, dove menziona il metodo arrayCopy che non sembra avere nulla a che fare con la creazione di un array uguale a un altro con un segno uguale Doug Ramsey: Probabilmente sono perché Non so davvero come funzionano le cose tanto quanto so che funzionano davvero .. – CoderTheTyler

risposta

12

No, non è la stessa cosa: gli array sono oggetti di riferimento, quindidiventa un alias di array1, non la sua copia. Qualsiasi assegnazione effettuata a un elemento di array2 diventa "visibile" tramite array1 e viceversa. Se si desidera eseguire una copia di un array a dimensione singola, è possibile utilizzare il suo metodo clone(); nota che la copia sarà shallow, cioè i singoli elementi dell'array saranno non essere clonati (rendendo il trucco inapplicabile alla matrice 2-D che hai descritto nel tuo post).

+0

Wow ... Non l'ho mai capito. Questo potrebbe probabilmente spiegare perché così tanti miei programmi con array non funzionano nel modo in cui li voglio. Grazie per l'illuminazione! – CoderTheTyler

5

array2 = array1 non crea copie degli elementi, solo il riferimento di matrice. Pertanto, array2 e array1 fanno riferimento allo stesso array sottostante.

Questo è molto facile da determinare da sé:

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

Come la risposta di @ dasblinkenlight ma con un esempio. Grazie! : D – CoderTheTyler

1

Hmm Credo che quando si effettua un array uguale a un altro, è sufficiente modificare il riferimento. Per esempio:

ARRAY 1 - * [] [] [] [] ... [] [] dove * è un riferimento alla matrice 1
Array 2 - & [] [] [] [] .. . [] [] dove & è il riferimento alla matrice 2

Poi Impostazione Array 1 = Array 2 Array 1 sarà sufficiente cambiare il suo riferimento a & ed iniziare a leggere al riferimento memoria &

1

la seconda riga il primo esempio di codice sta creando una variabile di riferimento di tipo String [] che fa riferimento allo stesso oggetto array bidimensionale che il riferimento erence array1 si riferisce a. C'è solo un array bidimensionale in memoria, ma due variabili di riferimento si riferiscono ad esso, array1 e array2.

Sembra confuso sulla definizione di ricorsione, quindi ti indicherò qui: Recursion in Computer Science.