어서와! 자료구조 알고리즘은 처음이지? 파트 3-2

창진·2022년 10월 19일
0

Hashtable<K, V> MAP = new Hashtable<K, V>();
Hashtable 선언할 경우 <K,V> 안에 는 generic 타입을 사용하셔야 합니다.

제네릭이란?
클래스에서 사용할 타입을 클래스 외부에서 설정하도록 만드는 것
제네릭으로 선언한 클래스는, 내가 원하는 타입으로 만들어 사용이 가능함
<안에는 참조자료형(클래스, 인터페이스, 배열)만 가능함 (기본자료형을 이용하기 위해선 wrapper 클래스를 활용해야 함)

주요 코드

MAP.put(K,V);
Key와 value를 사용자가 지정하여 값을 넣는 기능입니다.
get(Object key);
Key 값을 넣고 value를 출력하는 기능입니다. 값이 없으면 null 출력
getOrDefault(Object key, V defaultValue);
값이 없으면 null, 이 아닌 V defaultValue 의 값으로 출력됩니다.
putIfAbsent(K key, V value)
hashtable 에서 마지막에 쓰인 put으로 값이 정해집니다. 하지만 위의 코드를 사용하면 값이 비어있지 않으면 put으로 인한 덮어쓰기는 일어나지 않습니다.
remove(Object key)
key의 값으로 value 지우기
remove(Object key, Object value)
key, value 값 일치 확인 후 지우기
replace(K key, V oldValue, V newValue)
덮어쓰는 기능 key , oldValue 일치 확인 후 newValue로 덮어쓰기
keySet()
key 값만 출력
values()
value 값만 출력

hashtable 은 java.util를 사용하며 java.lang.Object 와 java.util.Dictionary<K,V> 를 상속 받습니다 hashtable 은 내부에 array가 작동하기 때문에 initial capacity 를 지정할수 있습니다.

map을 implement 합니다.

참고 : java docs

hashtable vs hashmap

Thread-safe 여부
Hashtable은 Thread-safe하고, HashMap은 Thread-safe하지 않다는 특징을 가지고 있습니다. 그렇기에 멀티스레드 환경이 아니라면 Hashtable은 HashMap 보다 성능이 떨어진다는 단점을 가지고 있습니다.

Null 값 허용 여부
Hashtable은 key에 null을 허용하지 않지만, HashMap은 key에 null을 허용합니다.

HashMap은 보조해시를 사용하기 때문에 보조 해시 함수를 사용하지 않는 Hashtable에 비하여 해시 충돌(hash collision)이 덜 발생할 수 있어 상대적으로 성능상 이점이 있습니다.

Synchronized 여부
hashtabled 은 되어있지만 hashmap은 되어있지 않습니다

profile
안녕하세요

0개의 댓글