반응형
HashMap 과 HashTable 은 모드 key 와 value 를 1대1 형태로 데이터를 저장하는 자료구조이다. 데이터를 저장할 때 key 값과 이와 mapping 되는 value 를 저장하는데, 이름에서 알 수 있듯이 hashing 을 사용하여 데이터를 저장한다.
데이터를 저장할 때 key 값은 hash function 을 통해 hash code 으로 변환되는데, 이 값을 index 로 하여 테이블의 해당 index 에 value 를 저장하는 방식으로 데이터를 저장한다.
둘다 key 에 대한 중복이 없고 순서를 보장하지 않는다. 대신 key 를 알고 있는 경우에 검색 속도는 O(1) 의 시간복잡도를 가지기 때문에 빠른 검색을 보장한다.
차이점
- HashMap 은 비동기로 동작한다. thread-safe 하지 않고 HashTable 은 동기적으로 동작하는 반면에 HashMap 은 multithreading 환경에서 적절한 동기화 코드 없이 thread 간에 공유될 수 없다.
- HashMap 은 key, value 의 값으로 null 값을 허용하지만 HashTable 은 이를 허용하지 않는다. null 을 허용한다고 하여서 HashMap 이 여러개의 null key 를 가질 수는 없다. 하나의 null key 와 여러개의 null value 를 저장할 수 있다.
- 쓰레드 동기화 기능이 필요없는 경우, HashMap 이 HashTable 보다 빠르기 때문에 많이 사용된다.
※ HashMap 이 null 을 허용하는 이유
데이터를 Hash table 에 정상적으로 저장 및 출력하기 위해서는 key 로 사용되는 객체에 대해서 hashCode method 와 equal method 를 구현되어 있어야 한다. null 은 객체가 아니기 때문에 이러한 method 들이 구현되어 있지 않아서 key, value 로 사용할 수 없다. 반면에 HashMap 은 HashTable 보다 이후에 만들어진 타입으로 이 부분에 대해 향상되어 구현되어 있기 때문에 null key 를 허용한다.
반응형
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] 오버라이딩 (Overriding) (0) | 2021.11.08 |
---|---|
[JAVA] 상속 (Inheritance) (0) | 2021.11.04 |
[JAVA] 변수의 초기화 (0) | 2021.09.04 |
[JAVA] 생성자 (Constructor) (1) | 2021.09.02 |
[JAVA] 오버로딩 (Overloading) (0) | 2021.09.01 |