2012-05-04 13 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はそれを最適化しますが、intのString表現を得るためには '+"の代わりに 'Integer.toString(i)'を使います。 – 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

**異なるリスト**への参照が2つありますが、それらのリスト内の参照は**同じ**なので、一方のオブジェクトに格納されているオブジェクトへの変更は他方のオブジェクトにも影響します。文字列を扱うときには問題ありませんが(不変です)、他のタイプのオブジェクトのリストを扱う際に留意すべき一般的な点です。 –

+0

@AnthonyGristはい私はそれを知っており、それを言及するのは良いことです。 –

+0

@ LuiggiMendozaの解決方法もありますが、新しい空の 'ArrayList 'を作成した後に 's2.addAll(s1)'や 'Collections.copy(s1、s2)'を使うこともできます。 'Collections'クラスと' Arrays'クラスには、ある時点で便利になるので、あなたが見直したいかもしれない他の多くのユーティリティメソッドがあります。 – rob