Sponsor Reklam 


05.02.2009 (07:09)

 Dizileri Kopyalamak, arraycopy() Metodu 
Değişkenlerin özelliklerinden birisi değerlerinin (value) olmasıdır. Bir diğer özelliği ise referans adreslerinin (reference - pointer) olmalarıdır. Dizileri ifade eden değişkenlerde veya sınıf örneklerinde (instance) yapılan atamalarda iki değişkende aynı yeri işaret ediyor olacaktır. Bunun anlamı, bir değişkenin içeriğinde yapılan değişiklik diğerini etkileyecektir.

int[] array1 = {0, 1, 2, 3};
int[] array2 = array1;
array1[0] = 7;
System.out.println(array2[0]);

Bu örnekte göreceğimiz üzere array2'nin sıfırıncı indisinde bir değişiklik yapılmasa da array1'in sıfırıncı gözüne 7 yazılması, array1[0]'ında 7 olmasına neden olacaktır. Bu bazen istemediğimiz durum olabilir. İlk dizinin bir kopyasını oluşturmak ve birinci diziyi etkilemeden ikinci dizi üzerinde çalışmak isteyebiliriz. Bunu yapmak için birinci dizinin sahip olduğu tüm elemanları ikinci dizinin gözlerine kopyalayabiliriz.

int[] source = {4, 22, 3, 41};
int[] destination = new int[source.length];
for (int i = 0; i < source.length; i++) {
  destination[i] = source[i];
}

Bu kopyalama ile artık hedef dizimizde yapılan değişiklikler kaynak dizimizdeki değerleri değiştirmeyecektir. Çünkü source ve destination farklı yerleri işaret eden referanslardır.

Bir diğer yöntem de System sınıfının arraycopy() metodudur. Bu metodun kullanımını da şu örnekte görebiliriz:

package kodcu.net;

public class Main {

  public static void main(String[] args) {
   
    int[] source = {1, 2, 6, 3};
    int[] destination = new int[source.length];
    int sourcePosition = 0;
    int destinationPosition = 0;
   
    System.arraycopy(source, sourcePosition, destination, destinationPosition, source.length);
   
    // Let's write numbers of destination array
    for (int i = 0; i < destination.length; i++) {
      System.out.println(destination[i]);
    }
    int[] arr = source;
    // reassigning zero index of the source array
    source[0] = 7;

    // this assignment does not affect zero index of the destination array
    System.out.println("\n" + destination[0]);
   
  }
}

Ekran çıktımız şu şekilde olacaktır:
1
2
6
3

1

Yani, kopyalama işleminden sonra hedef dizimizde yer alan elemanları görüyoruz ve kaynak dizimizin sıfırıncı gözüne yapılan 7 değeri ataması, hedef dizimizi etkilemiyor. Bu tarz kopyalama için veya belirli indisler arasını kopyalamak için arraycopy() metodunu kullanmamız kolaylık sağlayacaktır.
Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter