자바의 HashMap에 대해 알아보자! 📚
자바에서 HashMap은 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조입니다. 이를 통해 데이터를 효율적으로 관리할 수 있어요. 아래에서는 HashMap의 개념과 함께 자주 사용되는 메서드들을 예시와 함께 살펴보겠습니다. 😊
HashMap이란?
- 개념: HashMap은 데이터를 Key와 Value의 쌍으로 저장합니다. 데이터를 저장할 때는 Key 값을 해시함수를 통해 저장 위치를 결정하기 때문에, 특정 데이터의 검색, 추가, 삭제가 매우 빠릅니다.
- 특징: Key 값은 중복될 수 없으며, Value 값은 중복이 가능합니다. 순서를 보장하지 않으며, Key의 중복을 허용하지 않습니다.
HashMap 사용법 및 메서드
- HashMap 생성: HashMap<String, String> h1 = new HashMap<String, String>(); 기본 생성자를 사용하거나, 초기 용량(capacity)과 로드 팩터(load factor)를 지정할 수 있습니다.
-
- 초기 용량(Initial Capacity): HashMap이 생성될 때 할당되는 내부 저장소(배열)의 크기입니다. 기본값은 16입니다. 2
- 로드 팩터(Load Factor): HashMap의 저장 공간이 얼마나 차 있을 때, 자동으로 저장 공간을 확장할지 결정하는 기준입니다. 기본값은 0.75로, 이는 전체 저장 공간의 75%가 차면 자동으로 저장 공간이 확장된다는 의미입니다.
- 주요 메서드:
- put(Key, Value): Key와 Value를 HashMap에 추가합니다.
- get(Key): 지정된 Key에 해당하는 Value를 반환합니다.
- remove(Key): 지정된 Key와 그에 해당하는 Value를 HashMap에서 제거합니다.
- size(): HashMap에 저장된 요소의 개수를 반환합니다.
- clear(): HashMap의 모든 요소를 제거합니다.

HashMap<String, Integer> map = new HashMap<>();
map.put("사과", 10);
map.put("딸기", 5);
map.put("복숭아", 8);
System.out.println(map.get("사과")); // 출력: 10
map.remove("복숭아");
System.out.println(map.size()); // 출력: 2
위 예시처럼 put 메서드로 데이터를 추가하고, get 메서드로 데이터를 조회할 수 있습니다. remove 메서드로는 특정 데이터를 제거할 수 있습니다.
자바의 HashMap 시간복잡도 알아보기🕒
HashMap은 자바에서 제공하는 매우 유용한 자료구조 중 하나로, 데이터를 Key와 Value의 쌍으로 저장합니다. 이러한 구조 덕분에 데이터의 삽입, 검색, 삭제 등의 작업을 매우 빠르게 수행할 수 있습니다. 그럼 그 시간 복잡도에 대해 알아보겠습니다. 😊
HashMap의 시간 복잡도
- 삽입과 검색: HashMap의 가장 큰 장점 중 하나는 삽입(insert)과 검색(search) 작업의 시간 복잡도가 평균적으로 O(1)이라는 점입니다. 이는 HashMap이 각 Key에 해시 함수를 적용하여 배열의 고유한 인덱스를 생성하기 때문에 가능합니다.
- 삭제: 삭제(delete) 작업 또한 평균적으로 O(1)의 시간 복잡도를 가집니다. 이는 특정 Key를 통해 바로 해당 데이터에 접근하여 삭제할 수 있기 때문입니다.
🕒 시간 복잡도의 의미
- O(1): 이는 작업을 수행하는 데 필요한 시간이 데이터의 크기와 상관없이 일정하다는 것을 의미합니다. 즉, HashMap에 데이터가 많아도, 적어도 삽입, 검색, 삭제 작업의 속도는 일정하게 유지됩니다.
🚫주의할 점
- 최악의 경우: 해시 충돌(Hash Collision)이 빈번하게 발생하는 경우, 즉 다수의 Key가 동일한 해시 값을 가지게 되면, 시간 복잡도는 O(n)에 가까워질 수 있습니다. 하지만, Java의 HashMap은 이러한 해시 충돌을 최소화하기 위한 메커니즘을 가지고 있어, 실제로는 거의 발생하지 않습니다.
HashMap을 사용함으로써 데이터의 삽입, 검색, 삭제 작업을 매우 빠르게 수행할 수 있습니다.이러한 특성은 대용량 데이터를 다루는 애플리케이션에서 매우 유용합니다. 😄
반응형
'개발' 카테고리의 다른 글
| [Java Heap] 자바 힙 개념 정리 (feat. 시간복잡도) (0) | 2024.03.23 |
|---|---|
| [Java Linked List] 자바 링크드 리스트 개념 정리 (feat. 시간복잡도) (0) | 2024.03.22 |
| [Java Array] 자바 배열 개념 정리 (0) | 2024.03.20 |
| [큐] Queue 노트 정리 (simple) (0) | 2024.03.20 |
| [스택] Stack 노트 정리 (simple) (0) | 2024.03.19 |