- key와 value로 이루어진 한 쌍의 데이터를 저장하는 데이터 저장 구조(architecture)
- HashTable, HashMap, TreeMap 등의 구현 클래스를 가진다
- Map 인터페이스를 구현한 클래스
- 해싱을 통해 데이터를 저장하고 검색한다
- Java의 HashTable을 기능과 성능을 개선한 클래스. HashTable대신 사용하자.
- Hash Table의 구조를 그대로 사용
- 내부적으로 LinkedList를 사용
- 한정되지 않은 수의 데이터를 저장하는데 사용됨 (<-> 배열)
- 비연속적인 저장공간을 가진다
- Hash Table 답게 검색 속도가 빠르다 hash table 글 참고
- Key, Value로 이루어진 한 쌍의 데이터를 저장
- key는 각각 유일한 값이어야한다. 데이터를 저장하고 검색하기 위한 기준이 되는 값이기 때문
- 중복된 key로 값을 저장하면 값이 새로 저장되는 데이터로 덮어 씌워짐
- 디폴트 HashMap의 array 길이는 24, 최대 길이는 230
- 저장 순서 유지를 보장하지 않는다
- 새로 저장하려는 요소(key)가 새로운 요소임을 판단하는 기준
- hashCode()의 반환값이 일치하지 않거나(or)
- equals()가 false일 때
- 따라서 HashMap에 저장할 새로운 클래스를 정의할 때 주소값이 아닌 다른 기준으로 요소를 비교하고 싶다면, equlas() 뿐만 아니라 hashCode()도 오버라이딩을 해야한다.
- 해싱이란 해쉬함수로 유일한 값을 얻어 데이터를 저장하고 검색하는 기법을 말함
- 검색속도를 최적화하기 위해서는
- 저장될 데이터의 수에 따라 적절하게 array의 index를 설정해야한다
- 중복값 반환을 최소화하는 Hash Argorithm을 사용하는 것이 중요하다
- key를 Hash 함수의 인자로 넘겨 유일한 값(음이 아닌 정수, HashCode)을 얻는다
- HashCode를 배열의 index로 변환(보통 나누기 연산)하여 배열의 index에 저장된 LinkedList에 접근한다
- LinkedList에 동일한 key가 있는지 확인한 후 있다면 덮어쓰기를, 없다면 새로 저장(add)한다
- 이진 검색 트리의 형태로 키와 값의 쌍을 저장하는 데이터 구조
- 검색과 '정렬'에 적합하다
- 하지만 HashMap이 검색 성능이 더 뛰어나다
자바의 정석