I denne vejledning lærer du om forskellige måder, du kan bruge til at kopiere arrays (både en dimensionel og to-dimensionel) i Java ved hjælp af eksempler.
I Java kan vi kopiere et array til et andet. Der er flere teknikker, du kan bruge til at kopiere arrays i Java.
1. Kopiering af arrays ved hjælp af Assignment Operator
Lad os tage et eksempel,
class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )
Output :
1, 2, 3, 4, 5, 6
I ovenstående eksempel har vi brugt tildelingsoperatøren ( =
) til at kopiere en matrix navngivet numre til en anden matrix med navnet positiveNumbers.
Denne teknik er den nemmeste, og den fungerer også. Der er dog et problem med denne teknik. Hvis vi ændrer elementer i et array, ændres tilsvarende elementer i de andre arrays også. For eksempel,
class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays // change value of first array numbers(0) = -1; // printing the second array for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )
Output :
-1, 2, 3, 4, 5, 6
Her kan vi se, at vi har ændret en værdi i talrammen. Når vi udskriver positiveNumbers-arrayet, kan vi se, at den samme værdi også ændres.
Det er fordi begge arrays refererer til det samme array-objekt. Dette skyldes den lave kopi. Hvis du vil vide mere om lav kopi, skal du besøge lav kopi.
For at lave nye array-objekter, mens du kopierer arrays, har vi brug for dyb kopi snarere end en lav kopi.
2. Brug af Looping Construct til at kopiere arrays
Lad os tage et eksempel:
import java.util.Arrays; class Main ( public static void main(String() args) ( int () source = (1, 2, 3, 4, 5, 6); int () destination = new int(6); // iterate and copy elements from source to destination for (int i = 0; i < source.length; ++i) ( destination(i) = source(i); ) // converting array to string System.out.println(Arrays.toString(destination)); ) )
Output :
(1, 2, 3, 4, 5, 6)
I ovenstående eksempel har vi brugt for
sløjfen til at gentage gennem hvert element i kildearrayet. I hver iteration kopierer vi elementer fra kildearrayet til destinationsarrayet.
Her refererer kilde- og destinationsarrangementet til forskellige objekter (dyb kopi). Derfor, hvis elementer i et array ændres, er tilsvarende elementer i et andet array uændret.
Bemærk erklæringen,
System.out.println(Arrays.toString(destination));
Her bruges metoden toString () til at konvertere en matrix til en streng. For at lære mere, besøg metoden toString () (officiel Java-dokumentation).
3. Kopiering af arrays ved hjælp af arraycopy () -metoden
I Java indeholder systemklassen en metode, der hedder arraycopy()
at kopiere arrays. Denne metode er en bedre metode til at kopiere arrays end de to ovenstående.
Den arraycopy()
metode gør det muligt at kopiere en specificeret del af kilden array til destinationen array. For eksempel,
arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
Her,
- src - kildearray, du vil kopiere
- srcPos - startposition (indeks) i kildearrayet
- dest - destinationsarray, hvor elementer kopieres fra kilden
- destPos - startposition (indeks) i destinationsarrayet
- længde - antal elementer, der skal kopieres
Lad os tage et eksempel:
// To use Arrays.toString() method import java.util.Arrays; class Main ( public static void main(String() args) ( int() n1 = (2, 3, 12, 4, 12, -2); int() n3 = new int(5); // Creating n2 array of having length of n1 array int() n2 = new int(n1.length); // copying entire n1 array to n2 System.arraycopy(n1, 0, n2, 0, n1.length); System.out.println("n2 = " + Arrays.toString(n2)); // copying elements from index 2 on n1 array // copying element to index 1 of n3 array // 2 elements will be copied System.arraycopy(n1, 2, n3, 1, 2); System.out.println("n3 = " + Arrays.toString(n3)); ) )
Output :
n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)
I eksemplet ovenfor har vi brugt arraycopy()
metoden,
System.arraycopy(n1, 0, n2, 0, n1.length)
- hele elementer fra n1-arrayet kopieres til n2-arrayetSystem.arraycopy(n1, 2, n3, 1, 2)
- 2 elementer i n1-arrayet, der starter fra indeks 2, kopieres til indekset, der starter fra 1 i n3-arrayet
Som du kan se, er standardindledningsværdien af elementer i en int-type array 0.
4. Kopiering af arrays ved hjælp af copyOfRange () -metoden
Vi kan også bruge metoden copyOfRange () defineret i Java Arrays-klassen til at kopiere arrays. For eksempel,
// To use toString() and copyOfRange() method import java.util.Arrays; class ArraysCopy ( public static void main(String() args) ( int() source = (2, 3, 12, 4, 12, -2); // copying entire source array to destination int() destination1 = Arrays.copyOfRange(source, 0, source.length); System.out.println("destination1 = " + Arrays.toString(destination1)); // copying from index 2 to 5 (5 is not included) int() destination2 = Arrays.copyOfRange(source, 2, 5); System.out.println("destination2 = " + Arrays.toString(destination2)); ) )
Produktion
destination1 = (2, 3, 12, 4, 12, -2) destination2 = (12, 4, 12)
I ovenstående eksempel bemærk linjen,
int() destination1 = Arrays.copyOfRange(source, 0, source.length);
Her kan vi se, at vi opretter destination1-arrayet og kopierer kildearrayet til det på samme tid. Vi opretter ikke destination1-arrayet, før vi kalder copyOfRange()
metoden. For at lære mere om metoden, besøg Java copyOfRange.
5. Kopiering af 2d arrays ved hjælp af Loop
I lighed med det enkeltdimensionale array kan vi også kopiere det 2-dimensionelle array ved hjælp af for
loop. For eksempel,
import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < destination.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); for (int j = 0; j < destination(i).length; ++j) ( destination(i)(j) = source(i)(j); ) ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )
Output :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
I ovenstående program, bemærk linjen,
System.out.println(Arrays.deepToString(destination);
Her deepToString()
bruges metoden til at give en bedre repræsentation af det 2-dimensionelle array. For at lære mere, besøg Java deepToString ().
Kopiering af 2d-arrays ved hjælp af arraycopy ()
For at gøre ovenstående kode mere enkel, kan vi erstatte den indre sløjfe med System.arraycopy()
som i tilfældet med et enkeltdimensionelt array. For eksempel,
import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < source.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); System.arraycopy(source(i), 0, destination(i), 0, destination(i).length); ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )
Output :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Her kan vi se, at vi får den samme output ved at erstatte den indre for
sløjfe med arraycopy()
metoden.