Hashtable — 동기화된 해시 테이블
Hashtable — 동기화된 해시 테이블
Hashtable<K, V>는 키를 값에 매핑하는 해시 테이블을 구현한 클래스예요. null이 아닌 모든 객체를 키나 값으로 사용할 수 있어요. 키로 쓰는 객체는 hashCode와 equals 메서드를 구현해야 저장/검색이 동작해요.
본문
public class Hashtable<K, V> extends Dictionary<K, V>
implements Map<K, V>, Cloneable, Serializable
Hashtable은 예전부터 있던 클래스로, HashMap과 달리 메서드가 동기화(synchronized) 돼 있고 null 키/값을 허용하지 않아요. 성능에 영향을 주는 두 파라미터는 초기 용량과 로드 팩터예요. 이 해시 테이블은 열려 있어서(open) "해시 충돌" 시 단일 버킷에 여러 항목이 저장되고 순차 검색해야 해요. 초기 용량과 로드 팩터는 구현에 대한 힌트일 뿐이에요.
기본 로드 팩터(.75)는 시간과 공간 비용 사이에서 좋은 균형을 제공해요. 초기 용량이 최대 항목 수를 로드 팩터로 나눈 값보다 크면 리해시가 발생하지 않지만, 공간 낭비가 있을 수 있어요.
생성자
Hashtable(int initialCapacity, float loadFactor)— 지정된 초기 용량과 로드 팩터로 만들어요.Hashtable(int initialCapacity)— 지정된 초기 용량과 기본 로드 팩터(0.75)로 만들어요.Hashtable()— 기본 초기 용량(11)과 로드 팩터(0.75)로 만들어요.Hashtable(Map t)— 지정된 맵과 같은 매핑으로 만들어요.
기본 연산
size()— 키 수를 반환해요.isEmpty()— 키가 값으로 매핑돼 있지 않으면true를 반환해요.keys()/elements()— 키/값의Enumeration을 반환해요.contains(Object value)/containsValue(Object value)— 어떤 키가 지정된 값으로 매핑되는지 검사해요(containsKey보다 비싸요).containsKey(Object key)는 키 존재를 검사해요.get(Object key)— 키에 매핑된 값을 반환하고, 없으면null을 반환해요.put(K key, V value)— 키를 값에 매핑해요. 키와 값 모두null일 수 없어요.remove(Object key)— 키와 해당 값을 제거해요. 키가 없으면 아무것도 하지 않아요.putAll(Map t)/clear()— 매핑을 복사하거나 모두 제거해요.
내부 메서드
rehash()는 용량을 늘리고 내부를 재구성해 항목에 더 효율적으로 접근하게 해요. 키 수가 용량과 로드 팩터를 초과하면 자동으로 호출돼요.
뷰와 기타
keySet()/entrySet()/values()— 각각Map인터페이스 규약에 따른 뷰를 반환해요.computeIfAbsent,computeIfPresent,compute,merge—Map인터페이스의 계산·병합 연산을 제공해요.clone()— 얕은 복사본을 만들어요(키와 값은 복제되지 않아요). 비교적 비싼 연산이에요.toString()— 중괄호에", "로 구분된 항목 집합 형태의 문자열로 표현해요.equals(Object o)/hashCode()—Map인터페이스 정의에 따라 동등성과 해시코드를 계산해요.