본문 바로가기

Java

HashMap

  • Map 이터페이스를 구현한 구현체 중 하나
  • 키와 값을 저장하는 자료구조
    • 키와 값은 모두 객체다.
    • int, char 와 같은 기본형은 들어올 수 없다.
  • 값은 중복 저장 불가하여 저장하면 새로운 값으로 대체된다.
  • 해싱을 사용하기에 데이터 검색에 뛰어난 성능을 가진다.
    • 시간 복잡도

 

  • multi thread 환경에서는 사용하면 의도치않게 잘못된 값을 사용하게 되는 큰 문제 발생
  • 대신 ConcurrentHashMap 사용해야한다.
  • Hashmap의 key는 hash function을 거쳐 고유한 bucket index 생성하여 빠른 저장, 검색이 가능
    • 중복된 index 가 생기는 것을 Hash 충돌이라 부른다.
    • 충돌이 발생하면 내부적으로 entry간에 chaining 방식으로 해결하게 된다. (Java 8)
  • 실제 값이 저장되는 곳을 bucket 이라 부른다.
  • 다음은 전화번호부를 저장한 예시

 

 

 

 

 

관련 메서드

// 객체생성
HashMap<String, Integer> score = new HashMap<>();

// 값 저장 
V put(K key, V value)

// 값 조회 
V get(Object key) 

// key와 맵핑된 value값을 반환하고 없으면 defaultValue값을 반환
V getOrDefault(Object key, V defaultValue) 

// 기존 key 값이 없다면 새로운 key, value를 저장한다. 
V putIfAbsent(K key, V value) 

// key에 해당하는 key와 value를 삭제 
V remove(Object key) 

// 데이터 확인 
boolean containsKey(Object key) 
boolean containsValue(Object value)
boolean isEmpty()

// 모든 key 값을 가진 Set 데이터를 반환
Set<K> keySet() 

// 모든 key-value 맵핑 데이터를 가진 Set 데이터를 반환
Set<Map.Entry<K, V>> entrySet() 

// 모든 value 값을 가진 Collection 데이터를 반환
// Collection타입을 리턴하기에 Collections의 메서드를 사용가능
// Collection 인터페이스를 구현한 클래스에 대한 객체생성, 정렬(sort), 
// 병합(merge), 검색(search) 등의 기능을 안정적으로 수행하도록 도와주는 역할
Collection<V> values() :

 

 

 

내부 구체적인 동작 확인 참고 사이트 

https://d2.naver.com/helloworld/831311

https://en.wikipedia.org/wiki/Hash_table

 

 

 

참고

https://velog.io/@jaejun/자료구조JAVAHashMap이란

https://kadosholy.tistory.com/120 

 

 

'Java' 카테고리의 다른 글

Annotation 정리  (0) 2023.07.17
java int를 char로 형변환하기  (0) 2023.02.11
static, final, static final 특징  (0) 2022.08.20
PATH, CLASSPATH, BUILDPATH에 대해  (0) 2021.12.29
[Java] 예외 처리 - custom exception  (0) 2021.09.22