2017-10-14 65 views
-1

我的問題是如何在java中創建深層副本。 現在這是我的代碼,但我不認爲這是正確的。如何在java中創建深層副本

@Override 
public ListInterface<E> copy() { 
    ListerInterface<E> temp = new List<E>(); 

    if (isEmpty()) { 
     return null; 
    } else { 
     goToFirst(); 

     do { 
      temp.inset(retrieve()); 
     } while (currentNode.next != null); 

     currentNode = currentNode.next; 
    } 

    return temp; 
} 

那麼,有沒有人知道我應該改變我的代碼來得到一個正確的深拷貝?

+0

請添加一個[最小,完整和可驗證](https://stackoverflow.com/help/mcve)示例。既然這是你的第一個問題,你可以閱讀[提問問題指南](https://stackoverflow.com/help/how-to-ask)。 –

+0

關於參考文獻中的對象:您是否需要克隆它們? – thanopi57

+0

Maybee諮詢[Ar​​rays.deepEquals(...)](https://docs.oracle.com/javase/9​​/docs/api/java/util/Arrays.html#deepEquals-java.lang.Object:A- java.lang.Object:A-)方法? – thanopi57

回答

0

下面複製的代碼可能包含其他列表爲引用的對象列表:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class Main { 
    public static void main(final String[] args) { 
     final ArrayList list = new ArrayList(); 
     list.add(Arrays.asList("A", "B", "C")); 
     list.add("D"); 
     System.out.println(list); 
     final ArrayList out = new ArrayList(); 
     deepCopy(out, list); 
     System.out.println(out); 
    } 

    public static void deepCopy(final List out, 
           final List in) { 
     for (Object o: in) 
      if (o instanceof List) { 
       final ArrayList copy = new ArrayList(); 
       deepCopy(copy, (List)o); 
       out.add(copy); 
      } 
      else 
       out.add(o); 
    } 
} 

編輯:
如果你想被克隆的引用的對象,你要訪問的clone方法被引用的對象。

+0

謝謝,是的,我的確需要克隆整個列表。 –

+0

你需要克隆引用的對象嗎?如果是,那麼你需要通用參考還是具體的?因爲如果你去泛化,那麼你必須有權訪問克隆方法。 – thanopi57

+0

我需要一個泛型引用,我只是發現我忘記了我的程序中的克隆方法 –

相關問題