해결된 질문
작성
·
101
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
HashSet과 HashMap의 주요 메소드의 시간복잡도에 대해 정리한 내용인데, 제대로 이해했는지 올려봅니다.
1. HashMap은 hash table 역할을 하는 배열을 내부적으로 갖는데 기본 크기는 16이며, 저장되는 요소가 배열 크기의 75%를 초과하면 크기가 두배로 늘어나며 요소들은 re-hashing된다.
2. 특정 인덱스에 저장되는 데이터가 8개 이상이 되면, 이 데이터들은 red-black tree 형태로 변환되어 add(), get(), remove()와 같은 메소드를 호출할 때 O(log N)의 접근 효율을 제공한다.
3. 하지만 인덱스에 8개 이상이 아닌 2~7개의 데이터가 저장되는 경우 강의에서 설명한대로 데이터 접근에 대한 O(N)의 효율이 나온다. (해시 충돌 설명 인용)
4. 그리고 HashSet은 HashMap을 기반으로 하기 때문에 위 1~3번 역시 HashSet에 동일하게 적용된다.
(HashSet의 경우 각각 add(), contains(), remove())
위 정리가 맞다고 가정해도, 특정 인덱스에 8개 이상의 요소가 저장되는 경우가 드물기 때문에
경우에 따른 시간 복잡도를 저렇게까지 깊게 구분할 필요가 없는걸까요..?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
brianyhs님께서 정리하신 HashSet과 HashMap의 시간 복잡도에 대한 질문에 대해 안내드리겠습니다.
HashMap의 내부 구조:
Red-Black Tree 변환:
add()
, get()
, remove()
등의 메소드 호출 시 시간 복잡도가 O(log N)로 개선됩니다.해시 충돌로 인한 리스트 사용:
HashSet과의 관계:
마지막으로, 특정 인덱스에 8개 이상의 요소가 저장되어 Red-Black Tree로 변환되는 경우가 실제로는 드물 수 있습니다. 따라서 일반적인 사용에서는 평균적으로 O(1)의 시간 복잡도를 가지고 있다고 볼 수 있습니다. 하지만 특정 성능이 중요한 시점이나, 데이터의 형태에 따라서는 각각의 시간 복잡도 케이스를 이해하는 것이 중요할 수 있습니다. 질문 주신 내용 모두 잘 이해하고 계신 것 같습니다.
도움되셨기를 바라며, 추가 질문이 있다면 언제든지 남겨주세요! 😊
참고하시기 바랍니다:
- StackOverflow - HashMap in Java
- Spring Boot Reference Documentation: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto
질문 주셔서 감사합니다!