23.07.29
HashMap
1. HashMap과 Hashtable
1) Set (집합) 과 같이, 순서가 없다.
(순서를 유지 하고 싶으면 ? >> LinkedHashMap 클래스를 사용 하면 된다)
2) 키, 값 한쌍의 형태로 저장 된다.
키는 중복 허용 불가능.
값은 중복 허용 가능.
3) Map 인터페이스를 구현한 대표적인 컬렉션 클래스 이다.
4) HashMap (동기화 X) 은 Hashtable (동기화 O) 의 신버전의 개념 이다.
(동기화 개념은 쓰레드 개념이라, 나중에 다시 정리 하기)
5) TreeMap => TreeSet 과 거의 유사 하다.
범위 검색과 정렬에 유리한 컬렉션 클래스 이다.
HashMap 보다 데이터 추가, 삭제에 시간이 오래 걸리는게 특징 이다.
(비교해 가면서 저장 하기 때문에 ~)
[ 참고 ]
2. HashMap의 키 (Key)와 값 (Value)
1) 해싱 (hashing) 기법으로, 데이터를 저장 한다.
데이터가 많아도 검색이 빠른 특징을 가진다.
2) Map 인터페이스를 구현 했다. 데이터를 키와 값의 한쌍으로 저장 한다.
키 (Key) : 컬렉션 내의 키 중에서 유일 해야 한다.
값 (Value) : 키와 달리 데이터의 중복을 허용 한다.
>> 똑같은 키에 다른 값이 들어오면, 에러가 나거나 저장이 안되는게 아니라,
기존의 값에 새로운 값을 덮어 씌우게 된다.
키와 값의 한쌍을 "Entry" 라고 한다.
[ 참고 ]
Object[ ] key; >> 비객체지향적인 코드.
Object[ ] value; >> 비객체지향적인 코드.
---------------------------------------
Entry[ ] table;
class Entry {
Object key;
Object value;
}
>> 객체지향적인 코드.
(JDK 버전이 올라가면서, 내부 코드가 좀 바뀌긴 했는데 개념 정리를 위해서 위와 같이 정리)
3. 해싱 (hashing) 이란 ?
어떤 키 값을 넣으면 해시 함수 (hash function) 가,
해쉬 코드 (배열의 index == 저장 위치) 를 알려 준다.
즉, 해시 함수를 이용해서 해시 테이블에 데이터를 저장 + 검색.
4. 해시테이블 이란 ?
데이터를 저장 하는 공간 자체를 해시테이블 이라 한다.
해시테이블은 2차원 배열과 유사하게 생겼다.
그래서 테이블 이라고 부른다.
배열과 다르게, 길이가 가변적인게 차이점 이다.
>> 해시테이블은 배열과 링크드 리스트가 조합된 형태 이다.
배열의 장점 : 인덱스만 알면 바로 접근 할 수 있다.
링크드 리스트의 장점 : 가변적이기 때문에 변경에 유리 하다.
(링크드 리스트만 있으면, 인덱스가 없어서 찾기가 어려운데, 배열과 조합해서, 서로의 장점만 부각된 형태)
>> 데이터를 찾을 때, 데이터를 분류 해서 저장한 링크드 리스트를 배열에 저장 해 놓은 형태.
즉, 해시테이블의 구조라면,
데이터가 많아도 검색 속도가 상당히 빨라지는 이점을 가진다. 성능 굿.
5. [ 정리 ]
해시테이블에 저장된 데이터를 가져오는 과정
1) 키로 해시 함수를 호출해서 해시 코드를 얻는다.
2) 해시 코드 (해시 함수의 반환값) 에 대응 하는 링크드 리스트를 배열에서 찾는다.
3) 링크드 리스트에서 키와 일치하는 데이터를 찾는다.
>>
해시 함수는 같은 키에 대해 항상 같은 해시 코드를 반환 해야 한다.
서로 다른 키일지라도 같은 값의 해시 코드를 반환 할 수도 있다.
6. [ 참고 ] HashMap의 메서드
'Java의 정석 > 컬렉션 프레임워크' 카테고리의 다른 글
ArrayList와 Java API 확인 (0) | 2023.09.17 |
---|---|
Collection, List, Set, Map (0) | 2023.09.17 |
컬렉션 프레임워크와 핵심 인터페이스 (0) | 2023.09.17 |
Map (링크드 해시맵) 예제 02 (0) | 2023.08.26 |
Map (해시맵) 예제 01 (0) | 2023.07.30 |