221223 - 알고리즘 : Hash란

Cornchip·2022년 12월 23일
0

Today-I-Learned

목록 보기
10/28

목차
1. Hash
2. Hash: Method



1. Hash

1) Hash란

  • ArrayList는 내부 인덱스를 이용하여 검색이 한 번에 이루어지기 때문에 빠른 검색 속도를 보장하지만 데이터의 추가/삭제시 많은 데이터가 밀리거나 당겨지기 때문에 시간이 오래걸린다.
  • LinkedList는 추가/삭제시 인근 노드들의 참조값만 수정해 줌으로써 빠른 처리가 가능하지만 데이터를 검색할 경우 해당 노드를 찾기 위해 처음부터 순회 검색을 해야하기 때문에 데이터의 수가 많아질수록 효율이 떨어지는 구조이다.

Hash: 이러한 한계를 극복하기 위해서 제시된 방법

  • Hash는 내부적으로 배열을 사용하여 데이터를 저장하기 때문에 빠른 검색속도를 갖는다.
  • 데이터 추가/삭제시 기존 데이터를 밀어내거나 당기는 작업이 필요없도록 hashCode를 생성하여 이를 인덱스로 사용한다.

2) Hash Table

  • Hash가 내부적으로 사용하는 배열을 Hash Table이라고 한다.
  • key-value에서 key를 테이블에 저장할 때 key값을 Hash Method를 이용해 계산을 수행한 후, 그 결과값을 배열의 인덱스로 사용하여 저장하는 방식

3) Hash Method

  • Hash가 데이터를 저장할 때 사용하는 인덱스를 만드는 특별한 알고리즘을 수행하는 Method이다.
  • Hash Method에 의해 반환된 데이터의 고유 숫자값을 Hash Code라고 한다.
  • Hash Method를 이용해서 데이터를 Hash Table에 저장하고 검색하는 기법을 Hashing이라고 한다.

4) Hashing

  • HashMap과 같이 Hashing을 구현한 컬렉션 클래스에서는 Object 클래스에 정의된 hashCode()를 Hash Method로 사용한다.
  • Object클래스에 정의된 hashCode()는 객체의 주소를 이용하는 알고리즘으로 해시 코드를 만들어내기 때문에 모든 객체에 대해 중복되지 않는 값을 제공한다.
  • String 클래스의 경우 Object로부터 상속받은 hashCode()를 오버라이딩하여 문자열의 내용으로 해시 코드를 만들어낸다. 서로 다른 String 인스턴스 일지라도 같은 내용의 문자열을 가졌다면 hashCode()를 호출했을 때 같은 값을 얻는다.


2. Hash: Method

1) getOrDefault()

  • 기본적으로 HashMap.get(key)와 같다.
  • 그러나 해당 key값으로 조회된 값이 없을 경우 기존 get()함수는 null을 반환하는데 반해 이 함수는 정해진 default값을 반환한다.

2) entrySet()

  • 해당 map의 keyvalue를 가지는 Set객체를 리턴한다.
  • 해당 객체는 getKey()와 getValue()등을 사용할 수 있다.
profile
cornchip

0개의 댓글