HashMap은 Map을 구현한 구현체이다. 그래서, Map의 특징을 가지고 있다. key, value를 묶어서 하나의 데이터로 저장한다. 그리고 Hashing을 사용하기 때문에 많은 양의 데이터를 검색하는 데 뛰어난 성능을 보인다.
HashMap은 Entry라는 내부 클래스를 정의한다. Entry에는 key와 value가 변수로 존재한다.그래서 HashMap은 데이터를 저장할 때, Entry 형태로 저장한다.
Set entrySet() - HashMap에 저장된 키와 값을 엔트리의 형태로 Set에 저장해서 반환
Set keySet() - HashMap에 저장된 모든 키가 저장된 Set을 반환
Collection values() - HashMap에 저장된 모든 값을 컬렉션의 형태로 반환
Object put(Object key, Object value) - 지정된 키와 값을 HashMap에 저장
HashMap에서는 value는 중복을 허용하지만 key는 중복을 허용하지 않는다. 그래서 기존의 있던 키에 새로운 값을 put method를 사용해서 다시 넣으면 덮어쓰여진다.
먼저 해싱은 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법을 말한다. 해시함수를 통해서 데이터가 저장되어 있는 곳을 알려주어 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다.
해싱에서 사용하는 자료구조는 배열과 링크드 리스트의 조합으로 되어있다.
[출처]
해싱을 통해서 데이터를 저장할 때는 저장할 데이터의 키를 해시함수에 넣으면 배열의 한 요소를 얻게 되고, 다시 그 곳에 연결되어 있는 링크드 리스트에 저장하는 방식이다.
하나의 링크드 리스트에 여러 개의 데이터가 저장된다면, 해싱의 검색속도가 떨어진다. 그렇기 때문에, 적절한 크기를 잘 설정해야되고, 해시 충돌이 일어났을 경우, 처리하는 방법도 잘 설정 해놓아야 된다.
앞에서 설명한 TreeSet과 비슷하다. 하지만, TreeSet은 하나의 데이터만 저장했다면, TreeMap은 키와 값의 쌍으로 데이터를 저장한다.
검색을 용도로 데이터 구조를 선택해야한다면, TreeMap이 아닌, HashMap을 선택하고, 범위 검색이나 정렬이 필요한 경우에 TreeMap을 선택을 하자.
Map.Entry firstEntry() - TreeMap에 저장된 첫번째 키와 값의 쌍을 반환
Object firstKey() - TreeMap에 저장된 첫번째 키를 반환
Map.Entry floorEntry(Object key) - 지정된 key와 일치하거나 작은 것 중에서 제일 큰 키의 쌍을 반환. 없으면 null을 반환
Object floorKey(Object key) - 지정된 key와 일치하거나 작은 것 중에서 제일 큰 키를 반환.
Map.Entry higherEntry(Object key) - 지정된 key보다 큰 키중에서 제일 작은 키의 쌍을 반환.
Object higherKey(Object key) - 지정된 key보다 큰 키 중에서 제일 작은 키의 쌍을 반환