Love Every Moment

〔Java〕해시맵(HashMap)과 해시테이블(HashTable) 본문

PROGRAMMING::LANGUAGE/Java

〔Java〕해시맵(HashMap)과 해시테이블(HashTable)

해 송 2023. 7. 31. 17:28
반응형

 

1. 해시(Hash) 함수

  • 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
  • 해시테이블과 해시맵은 각각의 Key 값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 해당 index를 활용해 값을 저장하거나 검색하기 때문에 O(1) 의 빠른 검색 속도를 보인다

 

2. HashMap/HashTable

맵(Map)이란 키(Key)와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조

  • 해시맵과 해시테이블 모두 두 개의 객체를 키와 값의 한 쌍으로 묶어 보관하는 자료구조
  • 둘의 차이는 thread safe 한가 아닌가에 있다
  • 해시맵은 thread safe 하지 않고 해시테이블은 thread safe 하다

 

 

Java Platform SE 8

 

docs.oracle.com

 

[JAVA] HashTable의 개념 및 사용법 정리

안녕하세요 이번 포스팅에서는 HashTable에 대해서 알아보겠습니다 목차 HashTable이란? HashTable 선언하기 HashTable 값 추가하기 HashTable 값 삭제하기 HashTable 크기 구하기 HashTable 값 출력하기 HashTable이

crazykim2.tistory.com

 

[Collection] 이것만 알면 해시맵(HashMap) 정복 가능 - HashMap의 특징, 사용법 예제

해시맵(HashMap) 해시맵은 이름 그대로 해싱(Hashing)된 맵(Map)입니다. 여기서 맵(Map)부터 짚고 넘어가야겠죠? 맵이라는 것은 키(Key)와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조입니다. 여기서

reakwon.tistory.com

 

thread safe 의 의미?
  • Multi-thread 환경에서 공유자원에 대해 동기화(synchronized) 설정을 하지 않으면 여러 쓰레드가 동시에 하나의 공유자원에 접근하여 문제가 발생할 가능성이 있다
  • 하지만 thread safe 한 메소드는 synchronized 키워드가 걸려 있어 한 번에 하나의 쓰레드만 해당 메소드를 이용하기 때문에 공유자원에 여러 쓰레드가 동시에 접근하는 문제를 차단하므로 '안전' 하다고 표현하는 것이다
  • 해시맵과 다르게 해시테이블만 thread safe 한 이유는 내부에 구현된 코드를 보면 메소드에 전부 synchronized 키워드가 걸려있기 때문이다
  • 따라서 멀티쓰레드 환경에서는 해시맵보다 해시테이블을 사용하는 것이 안전하다
  • 하지만 싱글쓰레드 환경이라면 해시맵을 사용하는 것이 효율적이다
  • 기타 arrayBlockingQueue, arrayBlockingDeque, synchronizedList 처럼 Blocking 또는 synchronized 키워드가 들어있는 자료구조들도 thread safe 하다

 

 

[Java] 혼동되는 synchronized 동기화 정리

synchronized는 lock을 사용해 동기화를 시킨다. 하지만 사용 방식에 따라 혼동되기 쉽다. synchronized는 4가지의 사용법이 있다. sychronized method, sychronized block, static sychronized method, static synchonized block. 이

jgrammer.tistory.com

 

 

[Java] Queue 의 종류와 용법, 자바 병렬 프로그래밍 - 구성 단위

================================= ================================= ================================= 출처: http://oniondev.egloos.com/558949 멀티 스레드 환경에서 Queue는 생산 및 소비의 구조에 필수적인 자료구조이다. 여기서

202psj.tistory.com

 


 

 

3. HashMap/HashTable 의 순회

 

[Java]HashMap 순회하는 방법

이번 포스팅은 Java에서 HashMap을 순회하는 방법을 소개합니다. 방법 1. 반복자(Iterator) 및 entrySet() 메서드 Map 인터페이스는 Collection 인터페이스를 상속하지 않았으므로 반복자(Iterator)가 존재하지

developer-talk.tistory.com

  • HashTable.keySet() 을 통해 해시테이블의 key 들만 모은 set 을 얻어내고, for 반복문을 돌리는 방법
  • 또는 HashTable.entrySet() 을 통해 key 와 value 한 쌍의 Entry 객체들을 통째로 얻는 방법도 있다

 


 

4. HashTable 의 값에 List 담기

 

[JAVA] 같은 key인 경우, value에 리스트(list)로 담기

이번 메소드는 'HashMap에 key 단위로 value를 ArrayList로 담는 기능'을 수행한합니다. key를 primary key로 삼아, 같은 key인 value(ex.키워드)을 ArrayList로 담습니다. 이번 내용부터는 변수설명보다는 코드를

data-traveler.tistory.com

  • Integer 와 같은 객체 타입을 Value 로 담을 때와 동일한 방식으로 사용하면 됨

 


 

5. 해시 충돌(Hash Collision)

  • 자바의 hashCode() 메서드가 int 형 정수를 반환한다는 점으로 인해 서로 다른 객체의 해시코드가 같은 경우도 생긴다
 

☕ 자바 객체의 hashCode는 고유하지 않다 ❌

객체의 hashCode는 고유하지 않다 자바에서는 포인터를 철저히 숨겼기 때문에 직접적인 객체의 주소 원래값을 얻을수는 없다. 그래서 자바에서는 참조 변수의 주소값을 표현하기 위해 위와 같이

inpa.tistory.com

 

  • 자바의 Hashmap 은 Seperate Chaining 방식을 채용하여 해시 충돌 시 해당 버킷값을 첫 부분으로 하는 연결 리스트로 해결

 

[JAVA] HashMap의 해시충돌(hash collision)과 자바의 대응책

1) 개요 지난 포스팅에서 HashMap과 HashTable을 알아보며 Map 인터페이스를 상속한 구현체임을 알아봤다. 키-값을 통해 자료를 관리하는 구현체들을 성능상 차이점을 들어 비교를 했었다.지속적으로

odol87.tistory.com

 

반응형

'PROGRAMMING::LANGUAGE > Java' 카테고리의 다른 글

〔Java〕쓰레드 풀(Thread Pool)  (0) 2023.08.01
Comments