목차
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의
key
와 value
를 가지는 Set
객체를 리턴한다.
- 해당 객체는 getKey()와 getValue()등을 사용할 수 있다.