개발을 하다보면 자주 사용하는 Map이 있다.
Map 구현체
Map 인터페이스의 구현체로 HashMap, HashTable, ConcurrentHashMap 등이 있다. 이 셋은 과연 어떤 차이가 있을까?
Key, Value에 Null을 허용? Permalink
우선 HashMap 같은 경우 key와 value에 null값을 허용한다.
@Test
void hashmap() {
Map<String, String> hashMap = new HashMap<>();
hashMap.put("a", null);
hashMap.put(null, "a");
assertThat(hashMap.get(null)).isEqualTo("a");
assertThat(hashMap.get("a")).isNull();
}
HashTable은 key와 value에 null이 들어가게 되면 NullPointerException이 발생한다.
@Test
void hashtable() {
Hashtable<String, String> hashtable = new Hashtable<>();
assertThrows(NullPointerException.class, () -> hashtable.put(null, "a"));
assertThrows(NullPointerException.class, () -> hashtable.put("a", null));
}
ConcurrentHashMap도 Hashtable과 같이 key와 value에 null이 들어가게 되면 NullPointerException이 발생한다.
@Test
void concurrentHashmap() {
Map<String, String> concurrentHashMap = new ConcurrentHashMap<>();
assertThrows(NullPointerException.class, () -> hashMap.put("a", null));
assertThrows(NullPointerException.class, () -> hashMap.put(null, "a"));
}


참조 : https://parkmuhyeun.github.io/woowacourse/2023-09-09-Concurrent-Hashmap/