Ի՞նչն է ամենաարդյունավետ միջոցը զանգվածը պատճենելու համար:
sobes.tech AI
Պատասխան AI-ից
Պարզ տեսակների տվյալների և օբյեկտների համար առանց խորը պատճենման, առավել արդյունավետ եղանակներն են՝
-
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); -
Arrays.copyOf(): Հարմար մեթոդArraysդասից, որը ներքինապես օգտագործում էSystem.arraycopy():// Օրինակ՝ Arrays.copyOf-ի օգտագործում int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Խորը պատճենման համար (երբ անհրաժեշտ է պատճենել ոչ միայն հղումները, այլ նաև ինքը օբյեկտները, որոնց վրա հղում է) կարող են անհրաժեշտ այլ մոտեցումներ, օրինակ՝
-
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; } } -
Կոպիայի կոնստրուկտորի օգտագործում՝
// Օրինակ՝ կոպիայի կոնստրուկտոր class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // խորը պատճենում՝ ներքին օբյեկտ this.innerObject = new MyObject(other.innerObject); } } -
Սերիալիզացիայի/դեսերիալիզացիայի օգտագործում (օրինակ՝
ByteArrayInputStreamևObjectInputStream-ի միջոցով): Անարդյունավետ կարող է լինել մեծ զանգվածների կամ այն օբյեկտների համար, որոնք չեն իրականացնումSerializable: -
Երրորդ կողմի գրադարանների օգտագործում (օրինակ՝ Apache Commons Lang-ի
SerializationUtils.clone()մեթոդով):
Ամենաարդյունավետը մակերեսային (պատկերային) պատճենման համար է՝ System.arraycopy() կամ Arrays.copyOf(): Խորը պատճենման համար հաճախ նախընտրելի է օգտագործել կոպիայի կոնստրուկտոր։