HashMap 클래스
HashMap 클래스는 Map 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이다. JDK 1.2부터 제공된 HashMap 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.
HashMap 클래스는 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없다. 하지만 같은 값을 다른 키로 저장하는 것은 가능하다.
HashMap 클래스는 키와 값의 쌍을 저장하는 데 사용되는 "Map" 기반의 컬렉션 클래스로, HashMap <K,V>로 표시된다. 이 클래스는 맵의 순서를 보증하지 않는다. 이 클래스는 비동기(unsynchronized)이며 null 키/값을 허용한다는 점을 제외하면 Hashtable 클래스와 유사하다.
HashTable 클래스
Hashtable 클래스는 JDK 1.0부터 사용해 온 HashMap 클래스와 같은 동작을 하는 클래스이다. 현재의 Hashtable 클래스는 HashMap 클래스와 마찬가지로 Map 인터페이스를 상속받는다. 따라서 Hashtable 클래스에서 사용할 수 있는 메소드는 HashMap 클래스에서 사용할 수 있는 메소드와 거의 같다. 하지만 현재에는 기존 코드와의 호환성을 위해서만 남아있으므로, Hashtable 클래스보다는 HashMap 클래스를 사용하는 것이 좋다.
TreeMap 클래스
TreeMap 클래스는 키와 값을 한 쌍으로 하는 데이터를 이진 검색 트리(binary search tree)의 형태로 저장한다. 이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.
JDK 1.2부터 제공된 TreeMap 클래스는 NavigableMap 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현한다. TreeMap 클래스는 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없다. 하지만 같은 값을 다른 키로 저장하는 것은 가능하다.
해시 테이블( Hash Table ) vs 해시 맵(Hash Map)
Java에서 Hash Table과 Hash Map의 차이는 동기화 지원 여부이다. key에 대한 hash값을 사용하여 값을 저장,조회하는 것은 동일하다.
-해시 테이블
-병렬 처리를 할 때(동기화를 고려해야하는 상황)
-Null값을 허용하지 않는다.
-해시 맵
-병렬 처리를 하지 않을 때(동기화를 고려하지 않는 상황)
-Null값을 허용한다.
해시 맵(HashMap) vs 트리 맵(TreeMap)
엘리먼트들을 추가, 삭제, 위치 변경 등 작업을 하고 싶으면 HashMap이 최고의 선택이다.
하지만 만약 정렬되어 있는 key값에 따라 탐색을 하기 원한다면 TreeMap을 사용하는 것이 더 좋다. 컬렉션에 크기에 따라 다르지만 HashMap에 엘리먼트를 추가하고 이를 TreeMap으로 변환하는게 키를 정렬해서 탐색하는 경우보다 더 빠르게 동작한다.
-> 트리 맵은 해시 맵과는 다르게 key값이 정렬되어 있다.
참고 및 출처
'Backend > Java' 카테고리의 다른 글
[Java] Static (0) | 2024.02.22 |
---|---|
직렬화와 역직렬화 (0) | 2024.01.26 |
equals()와 hashCode() (0) | 2023.04.08 |
[StringUtills] String의 null / 빈 값 / 공백 처리하기 (0) | 2023.02.27 |
[Jackson] Json 날짜 타입 매핑하기 (0) | 2022.02.10 |