key 와 value를 이용해 데이터를 저장하는 자료 구조
HashTable
을 베이스로 하여 Collections의 Map 인터페이스
를 implement하였다.key와 value 에 null 허용
unsynchronized
여러 쓰레드에서 동시에 같은 HashMap에 접근하여 값을 수정하게 되면 의도한 결과와 다른 결과를 볼 수 있다..
// 멀티 스레드 환경에서 사용시 권장 방법 (java docs 참고)
Map m = Collections.synchronizedMap(new HashMap(...));
배열
과 LinkedList
의 조합으로 이루어져 있다.LinkedList의 주소
가 저장되어 있고, 배열의 위치는 key로 Hash Function
을 돌린 결과로 알 수 있다.배열의 장점인 빠른 조회와 LinkedList의 장점인 비순차적인 데이터의 빠른 수정을 합친 자료구조 이다..
key를 매개체로 Hash Function
을 돌린 값을 데이터 저장 위치에 사용한다. 하여, key 값만 알고 있으면 데이터를 빠르게 찾을 수 있다.Collection프레임워크
에서는 해싱을 구현할 때, Object
클래스의 hashCode()
를 해시 함수로 사용한다.Object
에 기본 정의된 hashCode()
는 객체의 주소를 이용해 해시코드를 만들어 낸다.String 클래스
의 경우 hashCode()
로 문자열을 사용한다. 그래서 동일한 문자열을 가지면 해시값도 동일하다.equals()를 override하는 이유
는 자바에서 동등성 비교에 사용되는 함수인 equals()
를 사용했을 때 같은 값임을 반환하기 위해서 이다.hashCode()를 override하는 이유
는 해싱 기법을 사용하는 자료구조를 이용할 때 equals()
의 결과와 동일한 결과를 반환하기 위해서 필요하다.의도한 대로 객체가 동등성을 유지하도록 하기 위해 두 함수 모두 같이 override 해야하는 것이다..