HashSet 클래스는 집합 자료 구조를 구현하며 중복을 허용하지 않습니다. 중복을 허용하지 않는다는 의미를 살펴보기 위해 다음과 같은 테스트 프로그램을 작성해보겠습니다. hashSet 을 생성한 다음 add( ) 메서드로 자료를 추가했습니다. 위 코드를 실행시켜보겠습니다. 동일한 자료 'D'를 두번 추가했는데요. 출력되는 것을 보면 중복된 자료는 출력되지는 않은 것을 볼 수 있습니다. 이 출력 결과에서 우리는 두 가지 사실을 알 수 있습니다. 첫째, HashSet 에 중복된 값은 추가되지 않는다는 것입니다. 둘째, ArrayList 는 순서가 있는 자료 구조이기 때문에 추가한 순서대로 출력되지만, HashSet 은 자료가 추가된 순서와 상관없이 출력됩니다.
HashSet 클래스활용 회원 관리 프로그램 구현
HashSet 을 활용하여 회원을 관리하는 프로그램을 구현해보겠습니다. HashSet 자료구조를 사용하여 멤버 클래스를 구현하였습니다. Set 자료구조는 index 가 없기 때문에 Iterator 를 활용하여 순환하여야 합니다. 이번에는 Test 클래스를 구현해보겠습니다. 출력 결과를 보면 굉장히 직관적으로 이해되지 않는 것이 있죠. 같은 아이디 1003 을 가진 Park 회원과 Hong 회원이 정상적으로 등록되고 출력되는 것을 확인할 수 있습니다. HashSet 자료구조의 원래 목적대로라면 같은 데이터는 추가되지 않아야 합니다. 우선 앞선 HashSetTest 클래스에서는 우리가 직관적으로 이해하는 HashSet 처럼 중복을 허용하지 않았습니다. 그 이유는 HashSet 에 추가한 String 객체가 equals 메서드와 hashCode 메서드를 Override 된 상태였기 때문입니다. 현재 우리가 사용하고 있는 member 클래스에 다음 코드를 추가해줍니다. 현재 우리 예제인 Member 클래스에 equals 메서드와 hashCode 메서드를 Override 했습니다. ( 논리적으로 같은 자료를 같다고 하기 위해서 equals 메서드와 hashCode 메서드 Override 하는 이유가 궁금하면 다음 포스트를 참고해주세요 : https://benprogram.tistory.com/104 ) Member 클래스에 equals 메서드와 HashCode 메서드를 override 한 이후 MemberHashSetTest 를 다시 실행하면 위와 같이 우리가 이해한 대로 논리적인 동일성을 판단하는 것을 확인할 수 있습니다.