posted by changhozz 2012. 7. 18. 12:13

HashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션이며, Set인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다.

HashSet에 새로운 요소를 추가할 때는 add메서드나 addAll메서드를 사용하는데, 만일 HashSet에 이미 저장되어 있는 요소와 중복된 요소를 추가하고자 한다면 이 메서드들은 false를 반환함으로써 중복된 요소이기 때문에 추가에 실패했다는 것을 알린다.

이러한 HashSet의 특징을 이용하면, 컬렉션 내의 중복된 요소들을 쉽게 제거할 수 있다.

ArrayList와 같이 List인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않으므로 저장순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다.

 

생성자 또는 메서드  

설명 

HashSet() 

HashSet객체를 생성한다. 

HashSet(Collection c) 

주어진 컬렉션을 포함하는 HashSet객체를 생성한다. 

HashSet(int initialCapacity) 

주어진 값을 초기용량으로하는 HashSet객체를 생성한다. 

HashSet(int initialCapacity, float loadFactor) 

초기용량과 load factor를 지정하는 생성자. 

boolean add(Object o) 

새로운 객체를 저장한다. 

boolean addAll(Object o)

주어진 컬렉션에 저장된 모든 객체들을 추가한다.(합집합) 

void clear() 

저장된 모든 객체를 삭제한다. 

Object clone() 

HashSet을 복제해서 반환한다. 

boolean contains(Object o) 

지정된 객체를 포함하고 있는지 알려준다. 

boolean containsAll(Collection c) 

주어진 컬렉션에 저장된 모든 객체들을 포함하고 있는지 알려준다. 

boolean isEmpty() 

HashSet이 비어있는지 알려준다. 

Iterator iterator() 

iterator를 반환한다. 

 boolean remove(Object o)

지정된 객체를 HashSet에서 삭제한다.(성공하면 true, 실패하면 false) 

boolean removeAll(Collection c) 

주어진 컬렉션에 저장된 모든 객체와 동일한 것들을 HashSet에서 모두 삭제한다. 

 boolean retainAll(Collection c)

주어진 컬렉션에 저장된 객체와 동일한 것만 남기고 삭제한다.(교집합) 

int size() 

저장된 객체의 개수를 반환한다. 

 Object[] toArray()

저장된 객체들을 객체배열의 형태로 반환한다. 

Object[] toArray(Object[] a) 

저장된 객체들을 주어진 객체배열(a)에 담는다. 

HashSet의 add메서드는 새로운 요소를 추가하기 전에 기존에 저장된 요소와 같은 것인 판별하기 위해 추가하려는 요소의 equals()와 hashCode()를 호출하기 때문에 equals()와 hashCode()를 목적에 맞게 오버라이딩해야 한다.

 

 

String클래스는 문자열의 내용으로 해시코드를 만들어 내기 때문에 내용이 같은 문자열에 대한 hashCode()호출은 항상 동일한 해시코드를 반환한다.
반면에 Object클래스는 객체의 주소로 해시코드를 만들어 내기 때문에
실행할 때마다 해시코드값이 달라질 수 있다.