2012-07-22 4 views
2

나는 쌍의 집합 목록이 있습니다. 만약 내가 평등을 사용한다면 그것은 모든 세트를 복사 할 것인가?한 목록에서 다른 목록으로 복사

List<HashSet<Pair>> list1 = new ArrayList<HashSet<Pair>>(); 
List<HashSet<Pair>> list2 = new ArrayList<HashSet<Pair>>(); 

list1.add(0, new HashSet<Pair>()); 
list1.add(1, new HashSet<Pair>()); 
list1.add(2, new HashSet<Pair>()); 
list1.add(3, new HashSet<Pair>()); 

내가 list2 = list1 일 경우 완벽하게 복사합니까? 왜냐하면 내가 그것을 사용할 때, 그것은 부서진다.

Iterator<Pair> it1 = list2.get(0).iterator(); 
Iterator<Pair> it2 = list2.get(1).iterator(); 
Iterator<Pair> it3 = list2.get(2).iterator(); 
Iterator<Pair> it4 = list2.get(3).iterator(); 
+1

이 충돌 할 때 당신은 어떻게 스택 추적을받을 수 있나요? –

답변

4
list2 = list1 

에 반영됩니다. 당신이 목록을 복사 할 경우 (. 그것은 두 개의 참조로 하나 목록에만 존재합니다), 당신은 복사 생성자를 사용해야합니다 :

list2 = new ArrayList<HashSet<Pair>>(list1); 
+0

고마워, 내가 자바를 배우고있어. – jimmyC

4

아니요. 할당은 아무 것도 복사하지 않고 대신 list2 참조가 list1을 가리 키도록 업데이트합니다. 따라서 list2를 list1처럼 사용할 수 있습니다. 그러나 2로 변경 한이 과제는 단순히 list1과 같은 목록을 가리 키도록 참조 list2를 할당 1.

+1

java의 컨테이너에 대해서도 마찬가지입니까? – jimmyC

+1

모든 개체에 대한 참조에서 동일합니다. –

+1

간단히 말해, 대입 연산자를 사용하여 Java에서 아무 것도 ** 복사하지 않을 것입니다. 여러분이 얻을 수있는 가장 먼 것은'int' 또는 비슷한 값을 다른 var에 할당하는 것입니다. –

관련 문제