რისი არის ყველაზე ეფექტიანი მეთოდი მასივის კოპირების?
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()მეთოდით):
საუკეთესოა ზედაპირული (ფართობიანი) კოპირებისათვის primitive ტიპებისა და მარტივი ობიექტებისთვის, გამოიყენეთ System.arraycopy() ან Arrays.copyOf(). სიღრმისეული კოპირებისათვის ხშირად სასურველია კოპირების კონსტრუქტორის გამოყენება.