Cara Mengcopy Array Dalam Program Java

Dalam Java, anda dapat menggunakan pernyataan penetapan atau tanda =,  untuk menyalin tipe data primitif, namun tidak demikian dengan array.

Apa yang terjadi ketika anda menetapkan variabel suatu array ke variabel array lainnya?

Yang terjadi sebenarnya adalah anda menyalin satu referensi ke referensi lainnya dan kemudian membuat kedua variabel mengarah pada lokasi memori yang sama.



Perhatikan kode di bawah ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class CopyArray {
 
 public static void main(String args []){
  
  int myArray [] = {1, 2, 3, 4, 5};
  
  int yourArray [] = {5, 6, 7 , 8 ,10};
  
  yourArray = myArray;
  
   System.out.println("yourArray sekarang adalah : " );
  
   for (int i = 0; i < yourArray.length; i++){
    
    System.out.print("["+ yourArray[i] + "]" + " " );
    
   }
   
   System.out.println();
   System.out.println("Setelah nilai index 0 myArray diubah "
     + "menjadi 100, yourArray adalah : " );
   myArray[0] = 100;
   
   for (int i = 0; i < yourArray.length; i++){
    
    System.out.print("["+ yourArray[i] + "]" + " " );
     
    }
   
  
 }

}

Output:
yourArray sekarang adalah :
[1] [2] [3] [4] [5]
Setelah nilai index 0 myArray diubah menjadi 100, yourArray adalah :
[100] [2] [3] [4] [5]

Pada pernyataan baris 9 yaitu yourArray = myArray, ini tidak menyalin isi dari myArray ke yourArray, namun hanya menyalin referensi nilai dari myArray ke yourArray, oleh karena itu ketika nilai myArray pada index 0 diganti dengan 100, maka nilai pada index 0 untuk yourArray juga akan berubah.

Terus bagaimana dengan nasib dari array yang sebelumnya direferensikan dengan yourArray, yaitu dengan konten elemen {5, 6, 7, 8, 9,10}? Array yang sebelumnya direferensikan dengan yourArray akan menjadi sampah, yang secara otomatis akan dikumpulkan oleh Java Virtual Machine, proses ini dikenal dengan istilah garbage collection.

Ada 3 cara untuk menyalin array, yaitu:
  • Menggunakan method clone untuk menyalin array
  • Menggunakan method static arraycopy yang terdapat dalam class System.
  • Menggunakan loop untuk menyalin elemen individu secara satu persatu 
Kali ini hanya akan di bahas mengenai penggunaan loop dan method arraycopy saja, karena penggunaan method clone berhubungan dengan class abstract dan juga interfaces.

Menggunakan loop

Pertama kita akan menggunakan loop, karena lebih familiar untuk pemula sehingga mudah dimengerti ketika menyalin elemen individu dari array, yang penting mengetahui terlebih dahulu mengenai proses dasar pada array, contohnya seperti di bawah ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class CopyArray {
 
 public static void main(String args []){
  
  int myArray [] = {1, 2, 3, 4, 5};
  
  int yourArray [] = {5, 6, 7 , 8 ,10};
  
  //loop untuk menyalin elemen array
  yourArray = new int[myArray.length];
  for (int i = 0; i < myArray.length; i++) {
  yourArray[i] = myArray[i];
  }
  
   System.out.println("yourArray sekarang adalah : " );
  
   for (int i = 0; i < yourArray.length; i++){
    
    System.out.print("["+ yourArray[i] + "]" + " " );
    
   }
   
   System.out.println();
   System.out.println("Setelah nilai index 0 myArray diubah "
     + "menjadi 100, yourArray adalah : " );
   myArray[0] = 100;
   
   for (int i = 0; i < yourArray.length; i++){
    
     System.out.print("["+ yourArray[i] + "]" + " " );
     
  }
   
   
  
 }

}

Output:
yourArray sekarang adalah :
[1] [2] [3] [4] [5]
Setelah nilai index 0 myArray diubah menjadi 100, yourArray adalah :
[1] [2] [3] [4] [5]

Bisa dilihat perbandingannya, walaupun myArray diubah pada nilai index 0 menjadi 100, namun nilai elemen yourArray adalah tetap hasil salinan dari myArray, karena myArray dan yourArray tetap menjadi referensi dari dua array yang berbeda.

Menggunakan method copyarray

Selanjutnya dengan menggunakan method copyarray dari class java.lang.System, syntax dari method ini adalah:
             arraycopy(sourceArray, srcPos, targetArray, tarPos, length);

Parameter dari srcPos dan tarPos mengindikasikan posisi awal dari array sumber / sourceArray dan array target / targetArray. Jumlah dari banyaknya elemen yang disalin dari sourceArray ke targetArray diindikasikan dengan length.

Method copyarray ini tidak mengalokasikan ruang memori untuk targetArray, jadi targetArray harus terlebih dahulu dibuat dengan dialokasikan ruang memori. Barulah setelah penyalinan dilakukan, maka sourceArray dan targetArray akan memiliki konten yang sama namun dengan lokasi memori yang terpisah.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class CopyArray {
 
 public static void main(String args []){
  
  int myArray [] = {1, 2, 3, 4, 5};
  
  int yourArray [] = {5, 6, 7 , 8 ,10};
  
  //Peran loop digantikan oleh method dari java.lang.System
  //yaitu method arraycopy
  System.arraycopy(myArray, 0, yourArray, 0, myArray.length);
  
   System.out.println("yourArray sekarang adalah : " );
  
   for (int i = 0; i < yourArray.length; i++){
    
    System.out.print("["+ yourArray[i] + "]" + " " );
    
   }
   
   System.out.println();
   System.out.println("Setelah nilai index 0 myArray diubah "
     + "menjadi 100, yourArray adalah : " );
   myArray[0] = 100;
   
   for (int i = 0; i < yourArray.length; i++){
    
     System.out.print("["+ yourArray[i] + "]" + " " );
     
  }
   
   
  
 }

}

Output:
yourArray sekarang adalah :
[1] [2] [3] [4] [5]
Setelah nilai index 0 myArray diubah menjadi 100, yourArray adalah :
[1] [2] [3] [4] [5]

No comments

Bahasa Java. Powered by Blogger.