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:
-
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); -
Arrays.copyOf():Arrayssinifində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:
-
Cloneableinterfeysini 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; } } -
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); } } -
Serializasiya/deserializasiya istifadə etmək (məsələn,
ByteArrayInputStreamvəObjectInputStreamilə). Effektiv olmaya bilər böyük massivlər və yaSerializabletətbiq etməyən obyektlər üçün. -
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.