2012-05-04 85 views
4

因此,我知道下面的方法會導致這兩個變量指向同一個對象,但是如果我確實想找到最簡單的方法來使ArrayList s2與s1完全相同,我該怎麼做這個?java - 複製數組列表

public static void main(String[] args) { 

     ArrayList<String> s1 = new ArrayList<String>(); 
     for (int i = 1; i <= 3; i++) { 
      s1.add(""+i); 
     } 
     ArrayList<String> s2 = s1; 

    } 
+1

請注意,您在'for'循環中正在執行不必要的字符串串聯操作。也許JVM會優化它,但是我會使用'Integer.toString(i)'而不是''「+ i'來獲取int的字符串表示形式。 – rob

回答

5

您應該以s1爲參數創建s2。

public static void main(String[] args) { 

    ArrayList<String> s1 = new ArrayList<String>(); 
    for (int i = 1; i <= 3; i++) { 
     s1.add(""+i); 
    } 
    ArrayList<String> s2 = new ArrayList<String>(s1); 

} 
+2

值得一提的是,雖然現在您有兩個對**不同列表的引用,但這些列表中的引用是**相同的**,因此對存儲在其中的對象的更改會影響另一個。使用字符串時不是問題(因爲它們是不可變的),但是在處理其他類型的對象列表時需要注意的一般要點。 –

+0

@AnthonyGrist是的,我知道這一點,很好的提及它。 –

+0

@ LuiggiMendoza的解決方案也是這樣做的,但是在創建一個新的空ArrayList 後,您也可以使用s2.addAll(s1)或Collections.copy(s1,s2)。 'Collections'和'Arrays'類有許多其他的實用方法,您可能需要查看,因爲它們在某些時候會派上用場。 – rob