Sobes.tech
Junior

Massivni nusxalashning eng samarali usuli qanday?

sobes.tech AI

AIdan javob

Oddiy ma'lumot turlari va chuqur nusxa ko'chirmasdan obyektlar uchun eng samarali usullar:

  1. System.arraycopy(): Tez nusxa ko'chirish uchun optimallashtirilgan mahalliy metod.

    // System.arraycopy() dan foydalanish misoli
    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 sinfidan qulay metod. Ichida System.arraycopy() ishlatiladi.

    // Arrays.copyOf() dan foydalanish misoli
    int[] sourceArray = {1, 2, 3, 4, 5};
    int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
    

Chuqur nusxa ko'chirish uchun (referanslar emas, o'z obyektlarini nusxa ko'chirish uchun) boshqa yondashuvlar talab qilinishi mumkin, masalan:

  1. Cloneable interfeysini amalga oshirish va clone() metodini qayta yozish. Yangi ishlab chiqish uchun tavsiya etilmaydi, chunki ko'plab muammolar mavjud.

    // Cloneable va clone() misoli
    class MyObject implements Cloneable {
        int value;
        MyObject innerObject;
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            MyObject cloned = (MyObject) super.clone();
            // chuqur nusxa ko'chirish ichki obyekt
            cloned.innerObject = (MyObject) this.innerObject.clone();
            return cloned;
        }
    }
    
  2. Nusxa ko'chirish konstruktoridan foydalanish.

    // Nusxa ko'chirish konstruktorining misoli
    class MyObject {
        int value;
        MyObject innerObject;
    
        public MyObject(MyObject other) {
            this.value = other.value;
            // chuqur nusxa ko'chirish ichki obyekt
            this.innerObject = new MyObject(other.innerObject);
        }
    }
    
  3. Serializatsiya/Deserializatsiya (masalan, ByteArrayInputStream va ObjectInputStream yordamida). Samara bo'lmasligi mumkin katta massivlar yoki Serializable ni amalga oshirmagan obyektlar uchun.

  4. Tashqi kutubxonalarni ishlatish (masalan, Apache Commons Lang bilan SerializationUtils.clone() metodi).

Eng samarali usul, sathiy (yuzaki) nusxa uchun, primitiv turlar va oddiy obyektlar uchun, System.arraycopy() yoki Arrays.copyOf() dir. Chuquroq nusxa uchun, ko'pincha, nusxa ko'chirish konstruktoridan foydalanish afzaldir.