본문 바로가기

프로그래밍/JAVA

[jAVA] 해시맵(HashMap)


0. 들어가기에 앞서


해싱(Hashing)이란 해시함수(hash function)를 이용해서 데이터를 해시테이블(hash table)에 저장하고 검색하는 기법을 말한다.


HashMap : 저장은 느리지만 많은 양의 데이터를 검색하는데 뛰어난 성능을 보인다.

TreeMap : HashMap에 비해 저장이 빠르지만 데이터를 가져올 때 약간 느리다


[ Map인터페이스 ] 


키(key)와 값(value)를 하나의 세트로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용

키(key) : 중복될 수 없음

값(value) : 중복될 수 있음.


데이터와 중복된 키와 값을 저장하면, 기존의 값은 없어지고 마지막에 저장된 값이 남게 된다.


<메서드>

void clear() : Map의 모든 객체를 삭제

boolean containsKey(Object key) : 지정된 key 객체와 일치하는 Map의 key객체가 있는지 확인

boolean containsValue(Object value) : 지정된 value 객체와 일치하는 Map의 value객체가 있는지 확인

Set entrySet() : Map에 저장되어 있는 key-value쌍을 Map.Entry 타입의 객체로 저장한 "Set"으로 반환

boolean equals(Object o) : 동일한 Map인지 비교

Object get(Object key) : 지정한 key객체에 대응하는 value객체를 찾아서 반환

int hashCode() : 해시코드를 반환

boolean isEmpty() : Map이 비어있는지 확인

Set keySet() : Map에 저장된 모든 key객체를 반환한다.

Object put(Object key, Object Value) : Map에 value객체를 key객체에 연결(mapping)하여 저장

void putAll(Map t) : 지정된 Map의 모든 key-value쌍을 추가

Object remove(Object key) : 지정한 key객체와 일치하는 key-value 객체를 삭제

int size() : Map에 저장된 key-value쌍의 개수를 반환

Collection values() : Map에 저장된 모든 value 객체를 반환



[ Map.Entry인터페이스 ]


Map인터페이스의 "내부 인터페이스". 

Map에 저장되는 키(key)와 값(value)를 다루기 위한 인터페이스이다.

따라서  Map인터페이스를 구현하는 클래스는 Map.Entry 인터페이스도 함꼐 구현해야 한다.


<메서드>

boolean equals(Object o) : 동일한 Entry인지 비교

Object getKey() : Entry의 key객체를 반환

Object getValue() : Entry의 value객체를 반환

int hashCode() : Entry의 해시코드를 반환

Object setValue(Object value) : Entry의 value객체를 지정된 객체로 바꾼다.





1. HashMap


해시맵을 사용하면 데이터 저장은 느리지만 많은 양의 데이터를 검색하는데 있어서 뛰어나다.

HashMap은 Map을 구현했으므로 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다.


키(key)는 중복 허용이 되지 않고, 값(value)는 중복이 허용된다. 예를 들어서 게임 ID는 중복이 안된다. 그러나 여러 명의 사람이 비밀번호를 1234라고 저장하는 경우가 있다고 생각하면 된다. 여기서 게임 ID가 키(key, 중복허용 X)이고, 비밀번호가 값(value, 중복허용 O)라고

 생각하면 이해하기 편할 것이다.


또한, Key와 Value값에 null값을 허용하기 때문에 데이터가 빠져있어도 문제되지 않는다.


while문을 통해서 true가 될 때까지 반복한다.

만약 id가 없으면 다시 입력을 요구한다.


키 3개를 저장했지만, 키(key)는 중복허용이 되지 않으므로 2개의 key값만 저장이 되었다.




구속의 합은 의미가 없지만, hasNext 메서드를 이용한 Value의 합을 구했다.