작성된 코드는 한 번만 반복됩니다. 이제 살펴 보자 : 이것은 요소가 List<Integer>
를됩니다 List
, 인, result
를 초기화
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
. 그런 다음 결과에 하나의 요소를 추가하므로 result
은 단일 요소 목록입니다. 그 한 요소는 그 자체로 제로 요소 목록입니다. 여기
List<List<Integer>> temp = new ArrayList<>();
, 당신은 temp
은 또한 요소 유형으로 List<Integer>
을 포함하는 List
로 초기화하지만 빈입니다.
for (List<Integer> list: result) {
list.add(10000);
temp.add(new ArrayList(list));
}
여기에서 result
에는 요소가 하나만 있습니다. 그 하나의 요소는 당신이 줄 2에 준 물건입니다. result.add(new ArrayList<>());
입니다. 이 루프는 result
의 각 요소를 반복하며 result
에는 요소가 하나만 있기 때문에 루프가 한 번만 반복됩니다.
이 경우 result
의 첫 번째 요소는 빈 목록이 아닌 10000
이 포함 된 목록으로 업데이트됩니다. 따라서 result
은 여전히 싱글 톤 목록이지만, 그 하나의 요소는 이제 10000
을 포함하는 싱글 톤 목록이 될 것입니다.
그런 다음 temp.add(new ArrayList(list))
으로 전화하십시오. new ArrayList(list)
을 호출하면 list
이 수행하는 모든 요소가 포함 된 ArrayList
이 생성됩니다. 전화를 걸 때 list
은 10000
을 포함하는 싱글 톤이므로 new ArrayList(list)
은 숫자가 10000
인 싱글 톤입니다. 그런 다음 이전에 빈 목록이었던 ArrayList
을 temp
에 추가합니다. 이제 temp
은 싱글 톤이며 하나의 요소는 10000
을 포함하는 싱글 톤 목록입니다.
이 시점에서 result
및 temp
은 모두 정확하게 하나의 요소를 포함하는 목록이며 각 요소는 정확히 하나의 요소를 포함하는 목록이며 숫자는 10000
입니다. 따라서 과 temp
의 값은 입니다. 여기에서 [10000]
은 숫자가 10000
인 목록이고 [[10000]]
은 [10000]
인 목록입니다.