HashMap

0

HashMap과 Hashtable : 순서X, 중복(키X, 값O)

: Map 인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장

HashMap

  • Map 인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서를 유지할 필요가 있을 때: LinkedHashMap 사용

TreeMap

  • 범위 검색과 정렬에 유리한 컬렉션 클래스
  • HashMap보다 데이터 추가, 삭제에 시간이 더 걸림(비교저장하기 때문에)
  • TreeSet과 거의 유사하다.(key, value로 저장하는 차이점)

HashMap의 키와 값

: 해싱(hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.
: Map 인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장

↳ 값이 1111로 저장됐다가, 1234로 바껴서 저장됨
→ 같은 키값을 넣으면 에러가 나는게 아니라, value값을 덮어씀

↳ 왼쪽보다는 오른쪽이 더 객체지향적인 코드.
사실 이것도 옛날 코드지만, map을 이해하는데 더 직관적이라서 강의자료로 이걸 씀.

해싱(hashing)

: 해쉬함수(hash function)를 이용해서 해시테이블(hash table)에 데이터를 저장&검색
↳ 같은 key를 넣으면 같은 해쉬코드(배열의 index, 저장위치를 가짐)가 나옴

  • 해시테이블: 배열과 LinkedList가 조합된 형태 (2차원 배열)
    • LinkedList를 쓰는 이유? 변경에 유리
    • 배열? index만 알면 한번에 찾아갈 수 있음 (접근성이 좋아서)
  • 해싱을 사용하는 클래스?
    • Hashtable
    • HashMap
    • HashSet
      → hashCode() 메소드를 이용하는데, 오버라이딩해서 사용.
      Objects.hash() 이용해서 해시함수를 작성하면 됨

해시테이블에 저장된 데이터를 가져오는 과정


1) 키로 해시함수를 호출해서 해시코드를 얻는다.
2) 해시코드(해시함수의 반환값)에 대응하는 LinkedList를 배열에서 찾는다.
3) LinkedList에서 키와 일치하는 데이터를 찾는다.
✔︎ 해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야 한다.
서로 다른 키일지라도 같은 값의 해시코드를 반환할 수도 있다.

HashMap Method

예제


출처

  • 자바의 정석 기초편 : ch11 - 46~47, 48~51
profile
백엔드를 공부하고 있습니다.

0개의 댓글