Java Copy Arrays (ved hjelp av System arraycopy (), Looping-konstruksjon og så videre)

I denne opplæringen lærer du om forskjellige måter du kan bruke til å kopiere matriser (både endimensjonale og todimensjonale) i Java ved hjelp av eksempler.

I Java kan vi kopiere en matrise til en annen. Det er flere teknikker du kan bruke til å kopiere matriser i Java.

1. Kopiere matriser ved hjelp av tildelingsoperatøren

La oss ta 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 + ", "); ) ) )

Utgang :

 1, 2, 3, 4, 5, 6

I eksemplet ovenfor har vi brukt oppdragsoperatøren ( =) til å kopiere en matrise med navn til en annen matrise som heter positiveNumbers.

Denne teknikken er den enkleste, og den fungerer også. Imidlertid er det et problem med denne teknikken. Hvis vi endrer elementer i en matrise, endres tilsvarende elementer i de andre gruppene. 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 + ", "); ) ) )

Utgang :

 -1, 2, 3, 4, 5, 6

Her kan vi se at vi har endret en verdi i tallmatrisen. Når vi skriver ut positiveNumbers-matrisen, kan vi se at den samme verdien også endres.

Det er fordi begge matriser refererer til det samme matriseobjektet. Dette er på grunn av den grunne kopien. For å lære mer om grunne kopier, besøk grunne eksemplarer.

Nå, for å lage nye matriseobjekter mens du kopierer matrisen, trenger vi dyp kopi i stedet for en grunne kopi.

2. Bruke Looping Construct for å kopiere matriser

La oss ta 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)); ) )

Utgang :

 (1, 2, 3, 4, 5, 6)

I eksemplet ovenfor har vi brukt forsløyfen til å iterere gjennom hvert element i kildearrayen. I hver iterasjon kopierer vi elementer fra kildearrisen til destinasjonsmatrisen.

Her refererer kilde- og destinasjonsmatrisen til forskjellige objekter (dyp kopi). Derfor, hvis elementer i en matrise endres, er tilsvarende elementer i en annen matrise uendret.

Legg merke til uttalelsen,

 System.out.println(Arrays.toString(destination));

Her brukes toString () -metoden til å konvertere en matrise til en streng. For å lære mer, besøk toString () -metoden (offisiell Java-dokumentasjon).

3. Kopiere matriser ved hjelp av arraycopy () -metoden

I Java inneholder systemklassen en metode som heter arraycopy()å kopiere matriser. Denne metoden er en bedre tilnærming til å kopiere matriser enn de to ovenfor.

Den arraycopy()metoden gjør det mulig å kopiere en bestemt del av kildegruppen til målet array. For eksempel,

 arraycopy(Object src, int srcPos,Object dest, int destPos, int length)

Her,

  • src - kildematrise du vil kopiere
  • srcPos - startposisjon (indeks) i kildearrayen
  • dest - destinasjonsoppstilling der elementene vil bli kopiert fra kilden
  • destPos - startposisjon (indeks) i destinasjonsmatrisen
  • lengde - antall elementer som skal kopieres

La oss ta 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)); ) )

Utgang :

 n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)

I eksemplet ovenfor har vi brukt arraycopy()metoden,

  • System.arraycopy(n1, 0, n2, 0, n1.length) - hele elementer fra n1-matrisen kopieres til n2-matrisen
  • System.arraycopy(n1, 2, n3, 1, 2) - 2 elementer i n1-arrayet som starter fra indeks 2 kopieres til indeksen som starter fra 1 i n3-arrayet

Som du kan se, er standard startverdi for elementer i en int-type matrise 0.

4. Kopiere matriser ved hjelp av copyOfRange () -metoden

Vi kan også bruke copyOfRange () -metoden som er definert i klassen Java Arrays for å kopiere matriser. 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)); ) )

Produksjon

 destinasjon1 = (2, 3, 12, 4, 12, -2) destinasjon2 = (12, 4, 12)

Legg merke til linjen i eksemplet ovenfor,

 int() destination1 = Arrays.copyOfRange(source, 0, source.length);

Her kan vi se at vi oppretter destination1-arrayet og kopierer kildearrayet til det samtidig. Vi oppretter ikke destinasjon1-matrisen før vi kaller copyOfRange()metoden. For å lære mer om metoden, besøk Java copyOfRange.

5. Kopiere 2d arrays ved hjelp av Loop

I likhet med det enkeltdimensjonale arrayet, kan vi også kopiere det 2-dimensjonale arrayet ved hjelp av forloop. 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)); ) )

Utgang :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

Legg merke til linjen i programmet ovenfor

 System.out.println(Arrays.deepToString(destination);

Her brukes deepToString()metoden for å gi en bedre representasjon av det 2-dimensjonale arrayet. For å lære mer, besøk Java deepToString ().

Kopiere 2d arrays ved hjelp av arraycopy ()

For å gjøre ovennevnte kode enklere, kan vi erstatte den indre sløyfen med System.arraycopy()som i tilfellet med en enkeltdimensjonal matrise. 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)); ) )

Utgang :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

Her kan vi se at vi får samme utgang ved å erstatte den indre forsløyfen med arraycopy()metoden.

Interessante artikler...