글
관련 이론 및 문법
(HashSet 클래스 참고)
http://kkikkodev.tistory.com/215
(HashMap 클래스 참고)
http://kkikkodev.tistory.com/457
문제 의도
다음 보기 중 참인 것을 고르는 문제입니다.
답안
A
풀이 방법
주어진 코드를 살펴보면 Person 클래스가 있고, 멤버 변수로는 String 형 name 변수가 있습니다. String 형 name 을 매개변수로 받는 매개변수 생성자가 있고, hashCode 메소드가 overriding 되어 있습니다. hashCode 메소드에서는 420 을 리턴하도록 재정의 되어 있습니다.
보기 B 는, HashMap 에서 하나의 Person 키를 삭제하면, Person 타입의 key 를 가지는 모든 요소들을 삭제한다고 했는데, 이는 잘못된 말입니다. 만약 맵에 서로 다른 name 을 가지는 Person 객체를 key 로 가지는 요소들이 존재한다고 가정하면, 하나의 Person 키를 검색해서 삭제하면 그 Person 객체는 하나의 name 만 가지고 있으므로, 최대 하나의 Person 객체 key 만 찾아서 요소를 삭제하게 됩니다. 따라서 답안 후보에서 제외합니다.
보기 C 는, HashSet 에 두 번째 Person 객체를 추가하는 것은 첫 번째 Person 객체가 중복되므로 삭제되게 한다고 했는데, 이는 잘못된 말입니다. hashCode 값은 같지만, name 이 다른 Person 객체를 추가하게 되면 삭제되지 않고 HashSet 에 추가되기 때문입니다. 따라서 답안 후보에서 제외합니다.
보기 D 는, HashSet 에서 Person 객체가 포함되어 있는지 여부를 결정하는 시간은 상수 시간이고, 맵의 사이즈에 의존하지 않는다고 했는데, 이는 잘못된 말입니다. 일단 HashSet 이므로 맵의 사이즈가 아닌 셋의 사이즈라고 오타 수정했습니다. 실제로 Person 객체를 HashSet 에 추가하면 같은 버킷에 추가되기 때문에, 검색 성능은 셋의 사이즈가 좌지우지하게 되고, 속도는 상수시간 O(1) 이 아닌 선형시간 O(n) 이 걸리게 됩니다. 따라서 답안 후보에서 제외합니다.
보기 A 는, Person 객체를 키로 가지는 HashMap 에서 값을 검색하는 시간은 맵의 사이즈에 의존된다고 했는데, 이는 맞는 말입니다. HashMap 에 추가될 때, key 의 hashCode 메소드를 호출하여 같은 해시값을 가지면 같은 버킷으로 분류하고, 그 다음에 equals 메소드를 호출하여 true 가 나오면 최신 값으로 수정하고, false 가 나오면 맵에 새로 추가하게 됩니다. 현재 Person 클래스에는 hashCode 만 420 을 리턴하도록 overriding 되어 있습니다. 만약 Person 객체를 key 로 가지는 요소들을 맵에 추가하면, 같은 버킷에 모두 추가되게 됩니다. 따라서 한 버킷에 모두 추가되기 때문에, 이 HashMap 에서 검색하게 되면, 한 버킷에서 순차적으로 검색을 해야 하므로, 맵의 사이즈에 따라서 검색 성능이 좌지우지 되게 됩니다. 즉 검색 속도가 최악의 경우 O(n) 선형 시간이 걸리게 됩니다.
결과적으로 보기 A 가 답안이 됩니다.
'4.1) OCJP > 1Z0-851 / 2012-08-28' 카테고리의 다른 글
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 30 번 (0) | 2016.11.13 |
|---|---|
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 29 번 (0) | 2016.11.13 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 28 번 (0) | 2016.11.13 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 27 번 (0) | 2016.11.12 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 26 번 (0) | 2016.11.12 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 24 번 (0) | 2016.11.12 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 23 번 (0) | 2016.11.12 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 22 번 (2) | 2016.11.12 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 21 번 (4) | 2016.11.12 |
| OCJP (1Z0-851 / 2012-08-28 / Exam C) - 20 번 (0) | 2016.11.06 |
RECENT COMMENT