Sobes.tech
Junior

Кадом усулии беҳтарини нусхабардории массивро?

sobes.tech AI

Ҷавоб аз AI

Барои намудҳои содда ва объектҳо бе нусхаи амиқтарин, роҳҳои зерин самараноктар мебошанд:

  1. System.arraycopy(): Методии ватанӣ, ки барои нусхаи зуд оптимизатсия шудааст.

    // Намунаи истифодаи System.arraycopy
    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. Дар дохили он System.arraycopy() истифода мешавад.

    // Намунаи истифодаи Arrays.copyOf
    int[] sourceArray = {1, 2, 3, 4, 5};
    int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
    

Барои нусхаи амиқтарини объектҳо ( вақте ки лозим аст, ки на танҳо истинодҳо, балки худи объектҳоро, ки онҳо ишора мекунанд, нусхабардорӣ кунед) метавонанд ба дигар усулҳо ниёз дошта бошанд, масалан:

  1. Иҷрои интерфейси Cloneable ва иваз кардани усули clone(). Тавсия дода намешавад барои таҳияҳои нав, ба сабаби мушкилоти зиёд.

    // Намунаи иҷрои Cloneable ва clone()
    class MyObject implements Cloneable {
        int value;
        MyObject innerObject;
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            MyObject cloned = (MyObject) super.clone();
            // нусхаи амиқтарини объекти дохилӣ
            cloned.innerObject = (MyObject) this.innerObject.clone();
            return cloned;
        }
    }
    
  2. Истифодаи конструктори нусха.

    // Намунаи конструктори нусха
    class MyObject {
        int value;
        MyObject innerObject;
    
        public MyObject(MyObject other) {
            this.value = other.value;
            // нусхаи амиқтарини объекти дохилӣ
            this.innerObject = new MyObject(other.innerObject);
        }
    }
    
  3. Истифодаи сериализатсия/десериализатсия (масалан, бо истифода аз ByteArrayInputStream ва ObjectInputStream). Мумкин аст, ки самаранок набошад барои массивҳои калон ё объектҳое, ки Serializable намебошанд.

  4. Истифодаи китобхонаҳои тарафи сеюм (масалан, Apache Commons Lang бо усули SerializationUtils.clone()).

Беҳтарин барои нусхаи рӯизаминии (плоский) намудҳои содда ва объектҳои оддӣ, System.arraycopy() ё Arrays.copyOf(). Барои нусхаи амиқтарини, одатан, беҳтар аст, ки конструктори нусха истифода шавад.