Šajā apmācībā jūs uzzināsit par dažādiem veidiem, kā ar piemēru palīdzību var kopēt masīvus (gan vienas, gan divdimensiju) Java.
Java valodā mēs varam kopēt vienu masīvu citā. Masīvu kopēšanai Java var izmantot vairākas metodes.
1. Masīvu kopēšana, izmantojot Assignment Operator
Ņemsim piemēru,
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 + ", "); ) ) )
Izeja :
1, 2, 3, 4, 5, 6
Iepriekš minētajā piemērā mēs esam izmantojuši piešķiršanas operatoru ( =
), lai kopētu masīvu ar nosaukumiem numurus uz citu masīvu ar nosaukumu pozitívNumbers.
Šis paņēmiens ir vienkāršākais, un tas darbojas arī labi. Tomēr ar šo tehniku ir problēma. Ja mēs mainām viena masīva elementus, mainās arī citu masīvu atbilstošie elementi. Piemēram,
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 + ", "); ) ) )
Izeja :
-1, 2, 3, 4, 5, 6
Šeit mēs varam redzēt, ka esam mainījuši vienu skaitļu masīva vērtību. Kad mēs izdrukājam masīvu pozitīvsNumbers, mēs varam redzēt, ka tiek mainīta arī tā pati vērtība.
Tas ir tāpēc, ka abi masīvi attiecas uz vienu un to pašu masīva objektu. Tas notiek seklās kopijas dēļ. Lai uzzinātu vairāk par seklu kopiju, apmeklējiet seklu kopiju.
Tagad, lai izveidotu jaunus masīva objektus, kopējot masīvus, mums ir nepieciešama dziļa kopija, nevis sekla kopija.
2. Izmantojot Looping Construct, lai kopētu masīvus
Ņemsim piemēru:
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)); ) )
Izeja :
(1, 2, 3, 4, 5, 6)
Iepriekš minētajā piemērā mēs esam izmantojuši for
cilpu, lai atkārtotu katru avota masīva elementu. Katrā atkārtojumā mēs kopējam elementus no avota masīva uz galamērķa masīvu.
Šeit avota un mērķa masīvs attiecas uz dažādiem objektiem (dziļa kopija). Tādējādi, ja tiek mainīti viena masīva elementi, cita masīva atbilstošie elementi netiek mainīti.
Ievērojiet paziņojumu,
System.out.println(Arrays.toString(destination));
Šeit, lai pārveidotu masīvu virknē, tiek izmantota metode toString (). Lai uzzinātu vairāk, apmeklējiet metodi toString () (oficiālā Java dokumentācija).
3. Masīvu kopēšana, izmantojot arraycopy () metodi
Java sistēmā Sistēma satur metodi, kas nosaukta arraycopy()
masīvu kopēšanai. Šī metode ir labāka pieeja masīvu kopēšanai nekā iepriekš minētie divi.
arraycopy()
Metode ļauj jums kopēt noteiktu daļu no avota masīva uz mērķa masīvs. Piemēram,
arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
Šeit,
- src - avota masīvs, kuru vēlaties kopēt
- srcPos - sākuma pozīcija (indekss) avota masīvā
- galamērķa masīvs, kurā elementi tiks kopēti no avota
- destPos - sākuma pozīcija (indekss) galamērķa masīvā
- length - kopējamo elementu skaits
Ņemsim piemēru:
// 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)); ) )
Izeja :
n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)
Iepriekš minētajā piemērā mēs izmantojām arraycopy()
metodi,
System.arraycopy(n1, 0, n2, 0, n1.length)
- veseli elementi no n1 masīva tiek kopēti uz n2 masīvuSystem.arraycopy(n1, 2, n3, 1, 2)
- 2 n1 masīva elementi, sākot ar indeksu 2, tiek kopēti indeksā, sākot no 1 no n3 masīva
Kā redzat, int tipa masīva elementu noklusējuma sākotnējā vērtība ir 0.
4. Masīvu kopēšana, izmantojot copyOfRange () metodi
Masīvu kopēšanai mēs varam izmantot arī metodi Java masīvu definēto copyOfRange () metodi. Piemēram,
// 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)); ) )
Rezultāts
galamērķis1 = (2, 3, 12, 4, 12, -2) galamērķis2 = (12, 4, 12)
Iepriekš minētajā piemērā ievērojiet līniju,
int() destination1 = Arrays.copyOfRange(source, 0, source.length);
Šeit mēs varam redzēt, ka mēs veidojam masīvu destination1 un tajā vienlaikus kopējam avota masīvu. Mēs neizveidojam masīvu destination1 pirms copyOfRange()
metodes izsaukšanas . Lai uzzinātu vairāk par metodi, apmeklējiet Java copyOfRange.
5. 2d masīvu kopēšana, izmantojot cilpu
Līdzīgi kā viendimensiju masīvs, mēs arī varam kopēt divdimensiju masīvu, izmantojot for
cilpu. Piemēram,
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)); ) )
Izeja :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Iepriekš minētajā programmā ievērojiet līniju,
System.out.println(Arrays.deepToString(destination);
Šeit deepToString()
metode tiek izmantota, lai labāk attēlotu divdimensiju masīvu. Lai uzzinātu vairāk, apmeklējiet Java deepToString ().
2d masīvu kopēšana, izmantojot masīvu kopiju ()
Lai padarītu iepriekšminēto kodu vienkāršāku, mēs varam nomainīt iekšējo cilpu ar System.arraycopy()
tāpat kā viendimensiju masīva gadījumā. Piemēram,
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)); ) )
Izeja :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Šeit mēs varam redzēt, ka mēs iegūstam to pašu rezultātu, aizstājot iekšējo for
cilpu ar arraycopy()
metodi.