목적
HashTable의 발전형인 HashMap은 자바에서 매우 유용한 데이터 구조 중 하나로,
key-value 쌍으로 데이터를 저장하는 데에 사용됩니다.
이해하기 쉽고 빠른 검색 속도를 제공하는 해시 테이블 기반의 Map 인터페이스 구현체입니다.
오늘은 HashMap에 대해 알아보겠습니다.
- HashMap에 대해 알아보자
- HashMap관련 메서드를 알아보자
HashMap
HashMap은 키와 값으로 이루어진 엔트리(Entry)로 데이터를 저장합니다.
각각의 키는 고유해야 하며, 값은 중복된 값을 가질 수 있습니다.
내부적으로 해시 함수를 사용하여 각각의 키에 대한 해시 코드(hash code)를 계산하고,
이 해시 코드를 기반으로 배열 내에서 해당 엔트리의 위치를 찾습니다.
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
transient Node<K,V>[] table;
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
...
}
}
위의 코드는 HashMap 코드에서 일부를 가져왔습니다.
HashMap에는 Map.Entry를 구현한 내부 클래스 Node가 있습니다.
이는 데이터 무결성을 위해 key 와 value 를 하나의 클래스로 정의하기 위함입니다.
Object[] key;
Object[] value;
를 아래처럼
transient Node<K,V>[] table;
static class Node<K,V> implements Map.Entry<K,V> {
final K key;
V value;
...
}
코드에서 볼 수 있듯이 key는 final 변수로 변경이 불가능합니다.
HashMap의 시간복잡도는
HashMap을 사용하면 O(1) 시간 복잡도로 요소에 접근할 수 있으므로,
대량의 데이터에서 정확하고 빠른 탐색이 필요한 경우 유용합니다.
관련 메서드
1. Object put(key, value)
put(key, value) 메서드는 지정된 키와 값의 쌍을 HashMap에 추가합니다.
만약 동일한 키가 이미 존재한다면 이전 값은 대체됩니다.
2. Object get(key)
get(key) 메서드는 해당 키에 해당하는 값을 가져옵니다.
3. boolean containsKey(key)
containsKey(key) 메서드는 지정된 키가 HashMap에 있는지 여부를 확인합니다.
4. Object remove(key)
remove(key) 메서드는 해당 키와 연결된 값을 제거합니다.
5. int size()
size() 메소드는 현재 HashMap의 요소 개수(키-값 쌍)를 반환합니다.
예시 코드
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
// HashMap 생성
HashMap<String, Integer> studentScores = new HashMap<>();
// 요소 추가
studentScores.put("Alice", 95);
studentScores.put("Bob", 80);
studentScores.put("Charlie", 90);
// 요소 접근
int aliceScore = studentScores.get("Alice");
System.out.println("Alice's score: " + aliceScore);
// 요소 수정
studentScores.put("Bob", 85);
// 요소 삭제
studentScores.remove("Charlie");
// 모든 요소 출력
for (String name : studentScores.keySet()) {
int score = studentScores.get(name);
System.out.println(name + "'s score: " + score);
}
}
}
결과
Alice's score: 95
Bob's score: 85
Alice's score: 95
위의 예제에서는 학생 이름을 키로, 점수를 값으로 사용하여 HashMap에 저장하고 접근하는 방법을 보여줍니다.
put() 메서드를 사용하여 요소를 추가하고, get() 메서드를 사용하여 특정 키에 해당하는 값을 가져올 수 있습니다.
또한 remove() 메서드로 요소를 삭제할 수도 있습니다.
손으로 노트 정리
'Language > JAVA' 카테고리의 다른 글
[Effective java] 필요한 자원, 의존 객체 주입 사용하기 (0) | 2023.08.21 |
---|---|
[JAVA][자료구조] Linked List (0) | 2023.08.12 |
[JAVA][자료구조] 배열 (0) | 2023.08.10 |
[Effective Java] private 생성자와 열거 타입으로 싱글턴 보증하기 (0) | 2023.08.10 |
[JAVA][자료구조] Stack (0) | 2023.08.09 |