Sobes.tech
Junior

Massivi kopyalamağın ən effektiv yolu hansıdır?

sobes.tech Süni İntellekt

AI-dan cavab

Əsas məlumat tipləri və dərin kopyalama olmayan obyektlər üçün ən effektiv üsullar:

  1. System.arraycopy(): Sürətli kopyalama üçün optimallaşdırılmış yerli metod.

    // System.arraycopy() istifadə nümunəsi
    int[] sourceArray = {1, 2, 3, 4, 5};
    int[] destinationArray = new int[sourceArray.length];
    System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length);
    
  2. Arrays.copyOf(): Arrays sinifindən rahat metod. Daxilində System.arraycopy() istifadə edir.

    // Arrays.copyOf() istifadə nümunəsi
    int[] sourceArray = {1, 2, 3, 4, 5};
    int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
    

Obyektlərin dərin kopyası üçün (yalnız referanslar deyil, həm də onların göstərdiyi obyektləri kopyalamaq üçün) digər yanaşmalar lazım ola bilər, məsələn:

  1. Cloneable interfeysini tətbiq etmək və clone() metodunu yenidən yazmaq. Tövsiyə edilmir yeni inkişaflar üçün, çünki çoxsaylı problemlər yarada bilər.

    // Cloneable və clone() nümunəsi
    class MyObject implements Cloneable {
        int value;
        MyObject innerObject;
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            MyObject cloned = (MyObject) super.clone();
            // dərin kopya iç obyekt
            cloned.innerObject = (MyObject) this.innerObject.clone();
            return cloned;
        }
    }
    
  2. Kopya konstruktorundan istifadə.

    // Kopya konstruktor nümunəsi
    class MyObject {
        int value;
        MyObject innerObject;
    
        public MyObject(MyObject other) {
            this.value = other.value;
            // dərin kopya iç obyekt
            this.innerObject = new MyObject(other.innerObject);
        }
    }
    
  3. Serializasiya/deserializasiya istifadə etmək (məsələn, ByteArrayInputStreamObjectInputStream ilə). Effektiv olmaya bilər böyük massivlər və ya Serializable tətbiq etməyən obyektlər üçün.

  4. Xarici kitabxanaların istifadəsi (məsələn, Apache Commons Lang ilə SerializationUtils.clone() metodu).

Ən effektiv üsul, səth (yüzey) kopyalar üçün, primitiv tiplər və sadə obyektlər üçün, System.arraycopy() və ya Arrays.copyOf()-dir. Dərin kopya üçün isə, çox vaxt, kopya konstruktoru üstün tutulur.