해시맵이란?
해시맵은 이름 그대로 해싱(Hashing)된 맵(Map)이다. 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다.
Map 인터페이스를 구현한 Map 컬렉션 중 하나이고, Map 인터페이스를 상속하고 있기 때문에 Map의 성질을 그대로 가지고 있다.
맵이란 키(Key)와 값(Value)으로 구성된 Entry 객체를 저장하는 구조를 가지고 있는 자료구조이다. 여기서 키와 값은 모두 객체이다. 키는 맵에 유일하게 있어야 되고, 중복을 허용하지 않지만 값은 중복된 값이어도 상관 없다. 같은 키의 값을 삽입하려고 하면 해당 키의 값이 변경된다.
해시맵은 해시 테이블과 유사하지만 동기화되지 않으며, null 키도 저장할 수 있지만 객체는 하나만 있어야 하며 값이 제한없이 있을 수 있다. 또한 맵의 순서를 보장하지 않으며 클래스와 해당 메소드를 사용하려면 java.util.HashMap패키지 또는 해당 슈퍼클래스를 가져와야 한다.
자바 해시맵의 특징
자바 해시맵의 특징해시맵은 키를 기반으로 값을 저장하고, 검색하는데 사용되는 데이터 구조이다.
- 빠른 액세스 시간 : HashMap은 요소에 대한 지속적인 시간 액세스를 제공한다. 즉, 요소 검색 및 삽입이 매우 빠르며 일반적으로 O(1) 시간 복잡성을 의미한다.
- 해싱 함수 사용 : HashMaps는 해시 함수를 사용하여 키를 배열의 인덱스에 매핑한다. 이를 통해 키를 기반으로 값을 빠르게 검색할 수 있다.
- 키-값 쌍 저장: HashMap의 각 요소는 키-값 쌍으로 구성된다. 이 키는 연관된 값을 조회하는 데 사용된다.
- null 키 및 값 지원 : HashMap은 null 값과 키를 허용한다. 이는 null 키를 사용하여 값을 저장할 수 있고 null 값을 키와 연결할 수 있음을 의미한다.
- 순서가 지정되지 않음: HashMap은 순서가 지정되지 않느다. 즉, 요소가 맵에 추가되는 순서가 유지되지 않느다. 그러나 LinkedHashMap은 삽입 순서를 유지하는 HashMap의 변형이다.
- 중복 허용 : HashMap은 중복 값을 허용하지만 중복 키는 허용하지 않느다. 중복 키가 추가되면 해당 키와 연결된 이전 값을 덮어쓴다.
- 스레드에 안전하지 않음 : HashMap은 스레드로부터 안전하지 않아 여러 스레드가 동일한 해시맵에 동시에 액세스하면 데이터 불일치가 발생할 수 있다. 스레드 안전성이 필요한 경우 ConcurrentHashMap을 사용할 수 있다.
- 용량 및 로드 인자 : HashMap에는 보유할 수 있는 요소 수인 용량과 크기를 조정하기 전에 해시맵이 얼마나 가득 찼는지 측정하는 로드 인자가 있다.
해시맵 예)
// Java Program to Create
// HashMap in Java
import java.util.HashMap;
// Driver Class
public class ExampleHashMap {
// main function
public static void main(String[] args) {
// Create a HashMap
HashMap<String, Integer> hashMap = new HashMap<>();
// Add elements to the HashMap
hashMap.put("John", 25);
hashMap.put("Jane", 30);
hashMap.put("Jim", 35);
// Access elements in the HashMap
System.out.println(hashMap.get("John"));
// Output: 25
// Remove an element from the HashMap
hashMap.remove("Jim");
// Check if an element is present in the HashMap
System.out.println(hashMap.containsKey("Jim"));
// Output: false
// Get the size of the HashMap
System.out.println(hashMap.size());
// Output: 2
}
}
Output
25
faluse
2
해시맵의 주요 기능
- HashMap은 java.util 패키지의 일부이다.
- HashMap은 Map 인터페이스의 불완전한 구현도 제공하는 추상 클래스 AbstractMap을 확장한다.
- 또한 복제 가능 및 직렬화 가능 인터페이스를 구현한다.
- HashMap은 중복 키를 허용하지 않지만 중복 값은 허용한다. 즉, 단일 키에는 2개 이상의 값이 포함될 수 없지만 2개 이상의 키에는 단일 값이 포함될 수 있다.
- HashMap은 null 키도 허용하지만 한 번 및 여러 개의 null 값만 허용한다.
- 이 클래스는 맵의 순서를 보장하지 않는다. 특히, 시간이 지나도 순서가 일정하게 유지된다는 보장은 없다. HashTable과 거의 유사하지만 동기화되지 않는다.
* 이 글은 geeksforgeeks내의 내용을 참고했습니다.
'자료구조' 카테고리의 다른 글
[자료구조] 힙(Heap) (1) | 2024.02.26 |
---|---|
[자료구조] 연결리스트 (0) | 2024.02.24 |
[자료구조] 배열(Arrary) (0) | 2024.02.23 |
[자료구조] 큐(Queue) (1) | 2024.02.23 |
[자료구조] 스택(Stack) (0) | 2024.02.21 |