2012-05-04 2 views
4

그래서 아래의 메소드는 두 변수가 같은 객체를 가리 키도록하지만, 가장 간단한 방법을 찾고 싶다면 s1과 정확히 같은 ArrayList s2를 갖고 싶습니다. 어떻게하면 좋을까요? 이?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

** 다른 ** 목록에 대한 두 개의 참조가 있지만 그 목록 내의 참조는 ** 같은 **이므로 하나에 저장된 객체에 대한 변경 사항은 다른 객체에 영향을줍니다. 문자열을 사용하여 작업 할 때 문제가되지는 않지만 (불변이므로), 다른 유형의 객체 목록을 사용하여 작업 할 때 염두에 두어야 할 일반적인 사항입니다. –

+0

@AnthonyGrist 예 그 점을 잘 알고 있습니다. –

+0

@ LuiggiMendoza의 해결책도 내가 할 수있는 일이지만, 새로운 빈'ArrayList '을 생성 한 후에's2.addAll (s1)'또는'Collections.copy (s1, s2)'를 사용할 수도 있습니다. 'Collections'와'Arrays' 클래스는 당신이 검토하기를 원하는 다른 많은 유틸리티 메소드를 가지고 있습니다. 왜냐하면 그것들은 어떤 시점에서 유용 할 것이기 때문입니다. – rob