HashSet 클래스는 내부적으로 해시 테이블 형태로, 데이터를 관리하는 Collection 으로, Set 의 특징을 지닙니다. Set 의 특징은, 중복을 제거한다는 점입니다. 또, 해시 테이블 구조를 지니기 때문에, 해시 함수에 의해 데이터를 그룹짓고, (hashCode 메소드) 실제 같은지를 판단하는 메소드로 equals 를 사용한다는 점입니다.


HashSet 에 데이터를 추가하거나, 삭제하거나, 검색할 때는, 먼저, hashCode 메소드로 같은 해시 값을 가지는 버킷을 찾아가고 (반드시 hash 값이 같을 필요는 없고, hash 값들을 특정 기준에 의해서 그룹지어서 저장하므로, 따라서 같은 해시 값을 가지면 같은 버킷에 속할 확률이 높아집니다), 그 다음에, equals 메소드를 호출하여 실제로 데이터의 동일 여부를 판단합니다. 따라서, 임의의 클래스를 생성하여 HashSet 으로 그 데이터를 관리하고자 할 때는, 적절한 hashCode 메소드와 equals 를 overriding 해야 합니다.


(기본적으로, String 클래스는 기본적으로 문자열 값이 같으면, hashCode 메소드에서도 같은 해시 값을 반환하도록 되어 있고, equals 메소드 또한 같다고 판단하도록 되어 있습니다. 덧붙여 Integer 클래스 또한 정수 값이 같으면, hashCode 메소드에서도 같은 해시 값을 반환하도록 되어 있고, equals 메소드 또한 같다고 판단하도록 되어 있습니다.)




(HashSet 클래스 참고)

https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html

by kkikkodev 2015. 8. 14. 16:37