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 аркылуу):

  4. Үчүнчү тарап китепканаларын колдонуу (мисалы, Apache Commons Lang SerializationUtils.clone() методу менен):

Эң эффективдүү — System.arraycopy() же Arrays.copyOf() колдонуу. Туура дубалбасты көчүрүү үчүн көбүнчө конструктор колдонуу артыкчылыктуу.