자바의 정석을 통해 공부한 내용을 요약하였습니다.
HashMap
1. 특징
- Map인터페이스를 구현한 컬렉션 클래스이다.
- 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다.
- 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 효과적이다.
- 키(key)는 중복을 허용하지 않지만 값(value)은 중복을 허용한다.
2. 해싱이란
해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법
- 해시함수는 데이터가 저장되어 있는 곳을 알려주기 때문에 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다.
- 해시테이블은 배열과 Linked list의 조합된 형태이다.
2-1. 해시테이블에 저장된 데이터를 가져오는 과정
- 검색하고자 하는 값의 키로 해시함수를 호출
- 해시함수의 계산결과(해시코드)로 해당 값이 저장되어 있는 LinkedList 찾기
- Linked List에서 검색한 키와 일치하는 데이터 찾기
LinkedList는 검색에 불리한 자료구조이기 때문에 하나의 서랍에 많은 데이터가 저장되어 있는 형태보다는 많은 서랍에 하나의 데이터만 저장되어 있는 형태가 더 빠른 검색결과를 얻을 수 있다.
이를 위해선 중복된 해시코드의 반환을 최소화해야 한다.
HashMap 또한 HashSet과 동일하게 equals()와 hashCdoe()를 이용하여 객체를 구별하고 있다.
HashMap은 이미 존재하고 있는 키에 대한 값을 저장하면 새로운 값으로 덮어쓰게 된다.
3. 메서드
3-1. 생성자
- HashMap() - HashMap 객체를 생성
- HashMap(int initialCapacity) - 지정된 값을 초기용량으로 하는 HashMap 객체를 생성
3-2. 추가
- Object put(Object key, Object value) - 지정된 키와 값을 HashMap에 저장
3-3. 삭제
- Object remove(Object key) - HashMap에서 지정된 키로 저장된 값 제거
3-4. 변경
- Object replace(Object key, Object value) - 지정된 키의 값을 지정된 객체로 대체
3-5. 검색
- Object get(Object key) - 지정된 키의 값을 반환
3-6. 기타
- Set entrySet() - HashMap에 저장된 키와 값을 엔트리 형태로 Set에 저장해서 반환
- Set keySet() - HashMap에 저장된 모든 키가 저장된 Set을 반환
- Collection values() - HashMap에 저장된 모든 값을 컬렉션의 형태로 반환
TreeMap
- 이진 검색 트리의 형태로 키와 값의 쌍으로 데이터를 저장한다.
- TreeSet처럼 데이터를 정렬해서 저장한다.
- 개별적인 검색은 HashMap이 TreeMap보다 빠르기 때문에 HashMap을 사용하는 것이 좋다.
- 범위 검색이나 정렬이 필요한 경우에는 TreeMap을 사용하는 것이 좋다.
Properties
- HashMap의 구버전인 Hashtable을 상속받아 구현한 클래스이다.
- Hashtable은 키와 값을 Object 형태로 저장하는 반면 Properties는 String으로 저장한다.
- 주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용되며 파일을 읽고 쓰는데 편리한 기능을 제공한다.