HashTable
키Key
와 값Value
의 쌍
으로 이루어진 자료구조입니다.
키를 해싱 함수Hash Function
를 통해 고유한 인덱스로 변환한 후, 이 인덱스에 해당하는 위치에 값을 저장하는 방식으로 동작합니다.
빠른 검색 속도
키를 해싱 함수를 통해 바로 인덱스로 변환합니다.
검색에 걸리는 시간이 상수 시간(O(1))에 가깝습니다.
중복된 키를 허용하지 않음
저장 순서가 유지되지 않음
Java
에서의 HashTable
& HashMap
자바에서는 HashTable과 HashMap 클래스를 제공하고 있습니다.
Hashtable과 HashMap은 둘 다 key-value 쌍을 저장하는 데이터 구조입니다.
그러나 두 클래스 간에는 몇 가지 중요한 차이점이 있습니다.
동기화(synchronization)
null 값 허용 여부
순서 보장 여부
속도
따라서, 멀티스레드 환경이 아니고 null 값을 허용해도 된다면 HashMap을 사용하는 것이 일반적으로 좋은 선택입니다.
Hashtable 클래스의 주요 메서드:
HashMap 클래스의 주요 메서드:
import java.util.Hashtable;
public class Example {
public static void main(String[] args) {
// Hashtable 객체 생성
Hashtable<String, Integer> hashtable = new Hashtable<>();
// 데이터 추가
hashtable.put("apple", 1);
hashtable.put("banana", 2);
hashtable.put("cherry", 3);
// 데이터 검색
int value = hashtable.get("banana");
System.out.println("Value of banana: " + value);
// 데이터 제거
hashtable.remove("cherry");
// 모든 key-value 쌍 출력
for (String key : hashtable.keySet()) {
System.out.println(key + " = " + hashtable.get(key));
}
}
}
import java.util.HashMap;
public class Example {
public static void main(String[] args) {
// HashMap 객체 생성
HashMap<String, Integer> hashMap = new HashMap<>();
// 데이터 추가
hashMap.put("apple", 1);
hashMap.put("banana", 2);
hashMap.put("cherry", 3);
// 데이터 검색
int value = hashMap.get("banana");
System.out.println("Value of banana: " + value);
// 데이터 제거
hashMap.remove("cherry");
// 모든 key-value 쌍 출력
for (String key : hashMap.keySet()) {
System.out.println(key + " = " + hashMap.get(key));
}
}
}
Map
과 HashMap
의 차이Map
과 HashMap
은 모두 키-값 쌍(key-value pair)의 데이터를 저장하는 자료구조입니다.
Map
은 인터페이스interface
이며, HashMap
은 Map 인터페이스를 구현한 클래스class
입니다.
Map
은 인터페이스이므로 인스턴스를 직접 생성할 수 없습니다.
HashMap
은 클래스이므로 인스턴스를 생성할 수 있습니다.
Map
은 다양한 구현체를 가질 수 있습니다. HashMap
, TreeMap
, LinkedHashMap
HashMap은 Map 인터페이스를 구현한 구현체 중 하나입니다.
HashMap
은 내부적으로 해시 테이블(hash table)을 사용하여 데이터를 저장합니다.
O(1)
에 가까운 시간 복잡도를 보장합니다.TreeMap
은 이진 검색 트리binary search tree
를 사용합니다.
O(log n)
의 시간 복잡도를 가집니다.HashMap
은 순서를 보장하지 않습니다. 즉, 저장된 순서대로 값을 가져올 수 없습니다.
LinkedHashMap
은 순서를 보장합니다. 즉, 저장된 순서대로 값을 가져올 수 있습니다.
HashMap
은 검색과 삽입 연산이 빠르고, 저장된 순서를 보장하지 않는 경우에 적합한 자료구조입니다.
만약, 저장된 순서를 보장하거나 검색과 삽입 연산이 느려도 되는 경우에는 TreeMap
이나 LinkedHashMap
을 고려할 수 있습니다.